Toon posts:

[VB] Datum en verschillende windows versies

Pagina: 1
Acties:

Verwijderd

Topicstarter
In een programma schrijf ik een datum weg in een file in een stringformaat zoals we dat in nederland gewend zijn.

03-04-2002 = 3 april

Deze datum lees ik later weer in.

Op zich geen probleem, tenzij de taalversie van windows anders is. Als ik een engelstalige windows versie heb dan leest hij de datum verkeerd in. Hij maakt van de bovenstaande datum 03/04/2002 en interpreteert dit als 4 maart.

Ik ben al aan het stoeien geweest met Format(datum,"dd-mm-yyyy") etc. Maar zonder success.

Weet iemand de oplossing. Of kan iemand me in de juiste richting duwen.

Is dit eenvoudig op te lossen of moet ik met allerlei omwegen eerst de windows instellingen gaan bepalen, en vervolgens de datum anders inlezen ?

Verwijderd

Format(datum,"yyyy-mm-dd") gaat (vrijwel) altijd goed.

Verwijderd

Topicstarter
Op vrijdag 19 april 2002 01:39 schreef Yarvieh het volgende:
Format(datum,"yyyy-mm-dd") gaat (vrijwel) altijd goed.
Het probleem is dat wat voor mij dd is voor de pc (indien engelstalig) mm is.

Die format gaat dus al fout

stel volgende code

datumstring = "01-03-2002"
MyDatum = Cdate(datumstring)

Mydatum = format(MyDatum,"yyyy-mm-dd")

debug.print day(Mydatum)
'Resulteert in
3

Verwijderd

Op vrijdag 19 april 2002 01:49 schreef KingLois het volgende:

[..]

Het probleem is dat wat voor mij dd is voor de pc (indien engelstalig) mm is.

Die format gaat dus al fout

stel volgende code

datumstring = "01-03-2002"
MyDatum = Cdate(datumstring)

Mydatum = format(MyDatum,"yyyy-mm-dd")

debug.print day(Mydatum)
'Resulteert in
3
Die format gaat wel goed, die cast van string naar mydatum gaat fout. een datum formatten (convet naar string dus) en daarna weer terug stoppen in 'n datum variable is ook wel op z'n minst een beetje dubieus te noemen trouwens..

Verwijderd

Datums zetten we in code als:
code:
1
MyDatum = #3/1/2002#  'Amerikaanse format M/D/Y

Verder, als je toch een string wilt gebruiken en als je zeker weet waar de dag, maand en jaar staat, dan gebruiken we DateSerial.
code:
1
MyDatum = DateSerial(3, 1, 2002)

Verwijderd

Of je zorgt ervoor dat je zeker niet afhankelijk bent van welke instelling dan ook:

Schrijven naar file als:
code:
1
Print #intFreeFile, Format(Date, "yyyymmdd")

Uitlezen als:
code:
1
datDatum = DateSerial(Left$(strDatum, 4), Mid$(strDatum, 5, 2), Right$(strDatum, 2))

Verwijderd

Idd, Format werkt als je het goed gebruikt altijd.

Volgens mij geeft Date$ (in tegenstelling tot Date) altijd Amerikaanse datum, maar dat weet ik niet helemaal zeker.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02:18

Gerco

Professional Newbie

Waarom niet een datum als een Single opslaan? Dan heb je helemaal geen last meer van verschillende datumformaten.
code:
1
2
3
4
5
6
7
8
9
Dim s as Single

' Opslaan
s = CSng(Now)
Print #1, s

' en uitlezen
Input #1, s
Debug.Print Format("dd-mm-yyyy", CDate(s))

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!

Pagina: 1