Holen Sie sich aktuelle Sommerzeit Einsparungen in Millisekunden

Ich mache analoge Uhr in Java Swing. Um zu berechnen, Uhr-Zeiger-Winkel, die ich brauche:

  1. UTC-Zeit in Millisekunden, die ich bekommen kann mit System.currentTimeMillis()
  2. TimeZone offset
  3. TimeZone DST Einsparungen.

Für 2) und 3) habe ich daran gedacht, mit
TimeZone.getDefault().getRawOffset() und TimeZone.getDefault().getDSTSavings().

Aber getDSTSavings() gibt immer 3600000 unabhängig vom aktuellen Datum wird im winter/Sommer Zeit.

Es sieht aus wie es nur prüft, ob dieser zone ist unter DST - management und wenn ja, gibt es 3600000 sonst 0.

Ist das ein bug in getDSTSavings()?

Wenn nicht, dann nur so bekommen Sie aktuelle DST Korrektur in Millisekunden ist die Verwendung von Kalender-Instanz wie: Calendar.getInstance.get(Calendar.DST_OFFSET)?

Calendar cal1 = Calendar.getInstance(TimeZone.getDefault());        //currentZone: CET/CEST +1/+2, GMT+1:00
System.out.println("System time, " + System.currentTimeMillis()); //UTC current milis
System.out.println("Calendar time, " + cal1.getTime().getTime());   //UTC current milis
System.out.println("Calendar milis, " + cal1.getTimeInMillis());       //UTC current milis
System.out.println("Calendar Zone Offset: " + cal1.get(Calendar.ZONE_OFFSET));
System.out.println("Calendar DST Offset: " + cal1.get(Calendar.DST_OFFSET));
System.out.println("Calendar Zone Offset: " + cal1.getTimeZone().getRawOffset());
System.out.println("Calendar DST Offset: " + cal1.getTimeZone().getDSTSavings());
System.out.println("");

//Winter time, CET
cal1.set(2010, 11, 15, 14, 15, 5);
System.out.println("Calendar milis, " + cal1.getTimeInMillis()); //UTC
System.out.println("Calendar Zone Offset: " + cal1.get(Calendar.ZONE_OFFSET)); //3600000 correct
System.out.println("Calendar DST Offset: " + cal1.get(Calendar.DST_OFFSET)); //0 correct
System.out.println("Calendar Zone Offset: " + cal1.getTimeZone().getRawOffset()); //3600000 correct
System.out.println("Calendar DST Offset: " + cal1.getTimeZone().getDSTSavings()); //3600000 wrong !!!
System.out.println("");

//Summer time - CEST
cal1.set(2010, 8, 15, 14, 15, 5);
System.out.println("Calendar milis, " + cal1.getTimeInMillis()); //UTC
System.out.println("Calendar Zone Offset: " + cal1.get(Calendar.ZONE_OFFSET)); //3600000 correct
System.out.println("Calendar DST Offset: " + cal1.get(Calendar.DST_OFFSET)); //3600000 correct
System.out.println("Calendar Zone Offset: " + cal1.getTimeZone().getRawOffset()); //3600000 correct
System.out.println("Calendar DST Offset: " + cal1.getTimeZone().getDSTSavings()); //3600000 correct
InformationsquelleAutor zlatanmomic | 2010-11-08
Schreibe einen Kommentar