/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Korrekt addition af datoer
Fra : dongfang xu


Dato : 27-10-01 19:21

Hej,

Når jeg tager to Date's - den ene, D1,er en java.sql.Time, den anden,
D2,en java.util.Date med time, minut, sekund, millis alle sat til 0 - og
lægger dem sammen

Date sum = new java.util.Date(D1.getTime() + D2.getTime())

får jeg en fejl på en time ?!?!?

Er dette ikke en korrekt måde at lægge Date's sammen, eller sker der
noget tidszone konvertering et sted ?

MVH
Søren



 
 
Peter Lind (27-10-2001)
Kommentar
Fra : Peter Lind


Dato : 27-10-01 20:47


"dongfang xu" <dongfang@daimi.au.dk> skrev
>
> Når jeg tager to Date's - den ene, D1,er en java.sql.Time, den anden,
> D2,en java.util.Date med time, minut, sekund, millis alle sat til 0 - og
> lægger dem sammen
>
> Date sum = new java.util.Date(D1.getTime() + D2.getTime())
>
> får jeg en fejl på en time ?!?!?

Jeps - og det er forbandet irriterende - jeg brugte i sin tid laaang tid på
at forstå hvorfor det overhovedet kunne lade sig gøre.

> Er dette ikke en korrekt måde at lægge Date's sammen, eller sker der
> noget tidszone konvertering et sted ?

Det er den korrekte måde, men der sker også noget tidszone konvertering.
Problemet er at en dato (et tidspunkt) repræsenteres som antal millisekunder
der er gået siden 1.januar 1970 (GMT).
Normalt har man tidszonen med i alle dato-objekter, så beregninger foregår
altid relativt til den, men det giver problemer da tidszonen ikke lagres i
databasen.

Jeg kan ikke finde ud af at forklare det helt præcist, men det er noget med
at når man skriver et tidspunkt til databasen, bliver det aktuelle tidspunkt
skrevet som det står, uden tidszone. Når det læses fra databasen igen, tror
java.sql.Date at det er et GMT tidspunkt der stod i databasen (hvilket det
måske også burde være - men det er en anden diskussion).

Det er lykkedes mig at få de korrekte tidspunkter ved at tilføje tidszonen
til beregningen, således:

Date sum = new Date( D1.getTime() + D2.getTime() +
java.util.TimeZone.getDefault().getRawOffset() );

Jeg er ikke sikker på hvor godt det fungerer mht sommertid og den slags, men
det opdager jeg nok om et par timer.

med venlig hilsen
Peter Lind



Allan Unnerup (30-10-2001)
Kommentar
Fra : Allan Unnerup


Dato : 30-10-01 19:40

> Er dette ikke en korrekt måde at lægge Date's sammen, eller sker der
> noget tidszone konvertering et sted ?

Du kan også addere tidspunkt og tid og resultatet er et nyt tidspunkt.
Du kan også addere to tider og resultatet giver en tid.
Du kan subtrahere tidspunkter, og resultatet er en tid.
Men det giver ikke mening at addere tidspunkter.

Hilsen Allan




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste