Erhalten Sie die tatsächlichen Sommerzeiteinsparungen in Millisekunden

8

Ich mache analoge Uhr in Java Swing. Um Uhrzeigerwinkel zu berechnen, brauche ich:

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

Für 2) und 3) dachte ich an die Verwendung TimeZone.getDefault().getRawOffset() und TimeZone.getDefault().getDSTSavings() .

Aber getDSTSavings() gibt immer 3600000 unabhängig vom aktuellen Datum im Winter / Sommer zurück.
Es sieht so aus, als würde nur überprüft, ob diese Zone unter DST management ist und wenn ja, gibt sie 3600000 andernfalls 0 zurück.
Ist das ein Fehler in getDSTSavings() ?
Wenn nicht, dann ist es nur möglich, die aktuelle DST -Korrektur in Millisekunden zu erhalten, indem Sie die Kalenderinstanz wie folgt verwenden: Calendar.getInstance.get(Calendar.DST_OFFSET) ?

%Vor%     
zlatanmomic 08.11.2010, 16:11
quelle

2 Antworten

12

Hier ist ein Beispiel, wie DST verwendet wird:

%Vor%

Dies wird 3600000 drucken, wenn die Sommerzeit zum angegebenen Datum in London in Kraft ist. Andernfalls wird 0 gedruckt.

    
dogbane 08.11.2010, 16:25
quelle
2

Die cal1-Instanz, die Sie in der ersten Zeile abrufen, befindet sich in GMT + 1 und ändert sich nicht, unabhängig davon, welche Uhrzeit / Datum Sie festgelegt haben. Wenn Sie die aktuelle Zeitzone bei jedem Tick der Uhr überprüfen müssen, müssen Sie bei jedem Tick eine neue Kalenderinstanz abrufen.

Als eine Randnotiz, wenn Sie bereit sind, eine Abhängigkeit zu Ihrem Projekt hinzuzufügen - Joda Time ist eine wunderbare Sache Datums- und Zeitbibliothek.

    
DaGGeRRz 08.11.2010 16:29
quelle

Tags und Links