Avatar billede krogstrup Nybegynder
18. marts 2004 - 22:11 Der er 5 kommentarer og
1 løsning

Problemer med år 2040 i UNIX stamps

Jeg bruger nedenstående 2 funktioner til at konvertere en date til et UNIX stamp og ligeledes til at konvertere et UNIX stamp til en normal dato.

Funktionerne fungerer perfekt - men men men, hvis jeg bevæger mig ind i år 2040 fejler funktionerne og jeg får et helt forkert output. Hvad går der galt - har nedenstående funktioner et problem specielt i forhold til år 2040 ?


function udate(oldDate)
' converts date to integer - unix time stamp
  udate = datediff("s", "01-01-1970 00:00:00", oldDate)
end function

function unudate(intTimeStamp)
' converts integer to date - unix time stamp
  unudate = dateadd("s", intTimeStamp, "01-01-1970 00:00:00")
end function


EKSEMPEL:

01-01-2004 00:00:00 - <%=udate("01-01-2004 00:00:00")%><br>
Konverter tilbage: <%=unudate(udate("01-01-2004 00:00:00"))%>

<br><br>

01-01-2040 00:00:00 - <%=udate("01-01-2040 00:00:00")%><br>
Konverter tilbage: <%=unudate(udate("01-01-2040 00:00:00"))%>
Avatar billede krogstrup Nybegynder
18. marts 2004 - 22:22 #1
Under kommentarer til artiklen på følgende side, fandt jeg nedenstående bemærkning:

http://activedeveloper.dk/artikler/default.asp?articleid=322

Som en sidste kuoristet er der et latent år 2038 problem med Unixstamp metoden, da den største Long det kan laves i VBScript er 2,147,483,647, dvs. datoen
Janyar 1970 kl 00:00:00 + 2,147,483,647 sekunder = 19-01-2038 03:14:07
er den maksimale dato der kan repræsenteres i VBScript pt.
Avatar billede krogstrup Nybegynder
18. marts 2004 - 22:22 #2
Kender nogen til en workaround der løser dette problem ?
Avatar billede erikjacobsen Ekspert
18. marts 2004 - 22:22 #3
en unix timestamp går kun til engang i år 2038 (eller er det nu 2036?)
Avatar billede erikjacobsen Ekspert
18. marts 2004 - 22:23 #4
Workaround? Brug ikke unix timestamp ;))  Datoer på formen 2040-11-11 osv kan man vel bruge.
Avatar billede retry Nybegynder
18. marts 2004 - 22:49 #5
På Windows-systemer, hvor shortdate format er sat til kun at vise årstal med to cifre, kan indbyggede funktioner, som er afhængige af systemets opsætning, tolke 40 som 1940.

Mit råd: Kør amerikansk! Dvs sæt LCID 1033 (=US, dato mm/dd/yyyy ) i toppen af scripts, husk # i datostrenge og foretag selv konvertering til/fra lokalt datoformat i brugergrænsefladen.
Avatar billede krogstrup Nybegynder
27. juni 2004 - 13:45 #6
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester