|
| 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
| |
|
|