2008-11-12 13 views
12

z Java 1.5.0_06 wersja na Windows i Ubuntu Linux:Java, dodając minut do daty, dziwne anomalia

Ilekroć dodać minut do terminu "2008/10/05 00:00:00" wydaje się, że dodatkowa godzina jest błędnie dodana.

czyli: dodawanie 360 ​​minut 2008/10/05 00:00:00 północy powinny przybyć 2008/10/05 06:00:00

Ale to jest przybyciu 2008/10/05 07 : 00: 00

Zupełnie kłopotliwe jest to, że ten TYLKO dzieje się, gdy dzień jest 2008/10/05, wszystkie inne dni, które próbuję poprawnie wykonać dodawanie minut.

Czy zwariowałem, czy jest to błąd w Javie?

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) {} 

Odpowiedz

18

W tym dniu istnieje zwrot z oszczędności na światło dzienne.

Czy jesteś w Nowej Zelandii? Jeśli tak, oznacza to, że pliki strefy czasowej są nieaktualne. Lepiej przejdź do strony pobierania Java i pobierz nowe; poszukaj "JDK DST Timezone Update Tool".

+0

Aha - wielkie umysły myślą podobnie - +1 :-) – toolkit

+0

Hehehe, tak! Tak czy inaczej, moja uwaga na temat Nowej Zelandii jest taka, że ​​od zeszłego roku dzienne oszczędności zostały przesunięte z pierwszej niedzieli października na ostatnią niedzielę września. Ponieważ Java 5 istnieje już od jakiegoś czasu, pliki stref mogą rzeczywiście wymagać aktualizacji. –

3

Czy może to wpłynąć na obniżenie czasu letniego?

1

Spójrz na Joda-Time.

Z dokumentacji:

„Joda-Time został stworzony, aby radykalnie datę i obsługi w języku Java czas zmienić Klasy JDK Data i kalendarz są bardzo źle zaprojektowane, miał liczne błędy i mają dziwne efekty działania. . "