Gå til innhold

Problemer med System.DateTime.Now


Anbefalte innlegg

Jeg sitter her med et ganske tricky problem, som egentlig haster litt å finne ut av.

 

Jeg har laget en applikasjon for et firma, og alt fungerer helt fint NESTEN overalt. Jeg klarte til slutt, etter å ha lånt den ene maskina dems (som de fikk feil på) og installert debugger på den (cordbg) hvor feilen ligger.

 

MANGE steder i programmet bruker jeg funksjonen System.DateTime.Now.ToShortDateString(). Av en eller annen grunn returneres det på denne, og en annen maskin de har, absolutt ingenting fra den funksjonen, noe som lager en klikk fordi jeg bruker en .Substring på den senere. (Får en nusselig ArgumentOutOfRangeException)

 

Noen som kan hjelpe til litt her? Hvorfor returnerer ikke ToShortDateString() noen ting? Forslag til en quickfix? Hva kan brukes i stedet? alternativet er at jeg henter ut dagens dato fra databasen liksom, men det blir også litt overkill i endel av sammenhengene.

Lenke til kommentar
Videoannonse
Annonse

Forferdelig merkelig... vil no eg si....

 

Nei nei.. du kan vel bruke database tingen også skrive en overload sak så du slipper å endre på resten av koden kanskje...

Eller så er det sikkert en fin API du kan bruke :tease: ( som enum windows )

 

Hva det glupt sagt.. eller må eg lengre ut på vidden med den? :p

Lenke til kommentar

Bare et par forslag ut i luften:

 

- Er det noen spesielle kjennetegn med disse maskinene? De er gamle, bruker Windows ME, har lite RAM, eller noe sånt. Selv har jeg dårlig erfaring med WinME og tildels Win98.

 

- Har du prøvd å reinstallere Framework på disse maskinene? (Noen filer kan jo blir korrupte).

Lenke til kommentar
  • 2 uker senere...

Som argument til den kan du vel sette CultureInfo? Du kan også sette dette som default for hele applikasjonen.

 

System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("noBK"); (culturestring'n er ganske sikkert feil...)

 

Slik blir output'n fra disse funksjonene like samme hvilken maskin du kjører det på.

Lenke til kommentar

Det vil iallfall være større sannsynlighet for det, men jeg tror jeg ville satt den til engelsk. Jeg gjør det slik:

        Dim oldCI As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture
       System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US")

       'Kode her
       'Jeg må gjøre dette når jeg laster et Excel-regneark

       'Så setter vi tilbake igjen
       System.Threading.Thread.CurrentThread.CurrentCulture = oldCI

Lenke til kommentar
Hvorfor i all verden ville du satt den til engelsk?

5288309[/snapback]

 

Smak og behag? ;) Vel, hvis man skal gjøre det på den "riktige" måten så bør man ikke forandre på den, men heller bruke de overload funksjonene som tar cultureinfo som parameter. Hvis applikasjonen din er på norsk, kan det kanskje være lurt å sette CurrentCulture til norsk ved oppstart... CurrentCulture angir jo hvilket instillinger som skal bli brukt for å vise alt av datoer og tall.

Lenke til kommentar
Men hva kan ha ført til at System.DateTime.Now.ToShortDateString() ikke har resturnert en dritt, egentlig?

5288739[/snapback]

 

"Av en eller annen grunn returneres det på denne, og en annen maskin de har, absolutt ingenting fra den funksjonen, noe som lager en klikk fordi jeg bruker en .Substring på den senere. (Får en nusselig ArgumentOutOfRangeException)"

 

Sikker på at den returnerer en tom string? ArgumentOutOfRangeException kan jo bety at den returnerer en string med forskjellig lengde enn du hadde regnet med...

 

Tror også man kan sette opp(/"ødelegge") måten windows formaterer på til å bli en tom string ved å forandre på Regional Settings i Control Panel. (Du får prøve selv...)

Lenke til kommentar
Jeg prøver det som er foreslått ved å sette CultureInfo manuelt, og se om det funker på de maskinene det krasjer på. Jeg har dessverre ingen av de tilgjengelig. de er ute hos min kunde.

5288908[/snapback]

 

 

Eller... du kan bruke DateTime.Now.Year, .Month, .Day istedenfor å bruke .Substring() :p

Lenke til kommentar
Det vil iallfall være større sannsynlighet for det, men jeg tror jeg ville satt den til engelsk. Jeg gjør det slik:

        Dim oldCI As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture
       System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US")

       'Kode her
       'Jeg må gjøre dette når jeg laster et Excel-regneark

       'Så setter vi tilbake igjen
       System.Threading.Thread.CurrentThread.CurrentCulture = oldCI

5287950[/snapback]

ve å bruke en-US klarte jeg jammen å fremkalle samme feilen på de maskinene som ikke har hatt denne feilen før ;) hehe...

 

Men hva i all verden er koden for bokmål da? no-NO, no-NOB, no-BM, no-BK, no-NOR... ingen av disse... noen som vet?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...