2016-09-29 14 views
0

Wenn ich etwas falsch mache ...TimeZone Offset zeigt ungültigen Wert

Ich lebe in Polen (GMT + 2). Wenn ich das schreibe, sind wir in der Sommerzeit. Der folgende Code, sagt aber, dass der GMT Zeitversatz ist nur 1 Stunde statt 2.

Calendar mCalendar = new GregorianCalendar(); 
    TimeZone mTimeZone = mCalendar.getTimeZone(); 
    System.out.println(mTimeZone); 
    int mGMTOffset = mTimeZone.getRawOffset(); 
    System.out.printf("GMT offset is %s hours", TimeUnit.HOURS.convert(mGMTOffset, TimeUnit.MILLISECONDS)); 

druckt GMT Offset 1 Stunde

Das Gleiche gilt für andere Zeitzonen passiert, zum Beispiel New York, das ist GMT-4:

Calendar mCalendar = new GregorianCalendar(TimeZone.getTimeZone("America/New_York")); 

druckt GMT -5 Stunden

+0

Check hier http://stackoverflow.com/questions/10545960/how-to-tackle-daylight-savings-using-timezone-in- Java – Karthik

Antwort

2

Es gibt zwei Methoden der Zeitzone Sie verwenden müssen:

Sie können überprüfen, ob das ein Datum in DaylightSaveTime ist mit:

mTimeZone.inDaylightTime(date) 

Und wenn dies Sie den Wert hinzufügen müssen

mTimeZone.getDSTSavings() 

auf die Offset Wahr ist:

Calendar mCalendar = new GregorianCalendar(); 
TimeZone mTimeZone = mCalendar.getTimeZone(); 
System.out.println("TimeZone: "+mTimeZone); 
int mGMTOffset = mTimeZone.getRawOffset(); 
if (mTimeZone.inDaylightTime(mCalendar.getTime())){ 
    mGMTOffset += mTimeZone.getDSTSavings(); 
} 
System.out.printf("GMT offset is %s hours", 
TimeUnit.HOURS.convert(mGMTOffset, TimeUnit.MILLISECONDS)); 

Ausgabe:

GMT offset is 2 hours 
1

Überprüfen Sie, ob DST in Java aktiv ist.

TimeZone tz = TimeZone.getTimeZone("America/New_York"); 
boolean inDs = tz.inDaylightTime(new Date()); 

Im Folgenden Code geben Sie mit DST Zeit

TimeZone zone = TimeZone.getTimeZone("America/New_York"); 
DateFormat format = DateFormat.getDateTimeInstance(); 
format.setTimeZone(zone); 

System.out.println(format.format(new Date()));