2008-11-12 8 views
12

Mit Java Version 1.5.0_06 auf Windows und Ubuntu Linux:Java, das Hinzufügen Minuten zu einem Datum, seltsame Anomalie

Immer, wenn ich Minuten auf das Datum „2008.10.05 00:00:00“ hinzufügen, Es scheint, dass eine zusätzliche Stunde falsch hinzugefügt wird.

dh: 360 Minuten Zugabe von 00:00:00 bis 2008/10/05 um Mitternacht bei 2008/10/05 06:00:00

ankommen sollte Aber es 2008.10.05 ankommt 07 : 00: 00

Die völlig verblüffende Sache ist, dass diese ONLY passiert, wenn der Tag 2008/10/05 ist, alle anderen Tage, die ich versuche, die Minuten Addition korrekt durchzuführen.

Werde ich verrückt oder ist das ein Bug in Java?

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 

    try { 
     String date = "2008/10/05 00:00:00"; 
     int minutesToAdd = 360; // 6 hrs 

     Calendar cal = Calendar.getInstance(); 
     cal.setTime(sdf.parse(date)); 
     cal.add(Calendar.MINUTE, minutesToAdd); 
     System.out.println(cal.getTime()); 

    } catch (ParseException e) {} 

Antwort

18

An diesem Tag gibt es eine Frequenzweiche für die Sommerzeit.

Sind Sie in Neuseeland? Wenn ja, sind Ihre Zeitzonendateien veraltet. Gehen Sie besser zur Java-Download-Site und laden Sie neue herunter. Suchen Sie nach "JDK DST Timezone Update Tool".

+0

Aha - tolle Köpfe denken gleich - +1 :-) – toolkit

+0

Hehehe, yep! Wie auch immer, mein Kommentar zu Neuseeland ist dies, seit dem letzten Jahr wurde die Sommerzeit vom ersten Sonntag im Oktober auf den letzten Sonntag im September verschoben. Da Java 5 schon eine Weile existiert, müssen die Zonendateien tatsächlich aktualisiert werden. –

3

Könnte dies ein Einsparen von Tageslicht sein?

1

Werfen Sie einen Blick auf Joda-Time.

Aus der Dokumentation:

„Joda-Time in Java zu radikal Datum und Uhrzeit ändern Umgang Die JDK-Klassen Datum und Kalender sind sehr schlecht konzipiert wurden zahlreiche Bugs hatten und haben ungerade Performance-Effekte erstellt wurde. . "

Verwandte Themen