2013-04-05 8 views
6

Wie unterschiedlich ist EST von EST5EDT? Berücksichtigt EST DST nicht?Wie unterscheidet sich die Zeitzone EST von EST5EDT?

Ich schrieb einen kleinen Java-Schnipsel den Unterschied herauszufinden und Ausgabe sagt EST5EDT in nimmt DST Rechnung zu tragen, während EST nicht

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.SSS"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("EST5EDT")); 
System.out.println("EST5EDT" +dateFormat.format(new Date())); 
    /* prints EST5EDT2013-Apr-05 02:24:16.471 */ 


dateFormat = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.SSS"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("EST")); 
System.out.println("EST "+dateFormat.format(new Date())); 
    /*prints EST 2013-Apr-05 01:24:16.472 */ 

hat aber die folgenden Schnipsel erzeugen schockierenden Ausgang

System.out.println("EST5EDT offset "+TimeZone.getTimeZone("EST5EDT").getRawOffset()/(60*60*1000)); 
/* prints 5 instead of 4 (DST) */ 

Could jemand bitte erklären was genau hier passiert? Warum gibt getRawOffset 5 statt 4 zurück? Wie bekomme ich den Zeitzonen-Offset mit DST?

+0

Vermeiden Sie, wenn möglich, sowohl die EST- als auch die EST5EDT-Kennung. Verwenden Sie stattdessen "America/New_York" und zugehörige Bezeichner. [Siehe hier] (http://www.nntp.perl.org/group/perl.datetime/2009/03/msg7221.html) und den dup post. –

Antwort

6

Nicht EST berücksichtigen DST?

Nein. Nach Definition EST ist "Eastern Standard Time" oder UTC-5: 00.

EDT ist "Eastern Daylight Time" oder UTC-4: 00.

Es ist ein wenig verwirrend, weil zum Beispiel New York zwischen EST und EDT wechselt und Seattle zwischen PST und PDT wechselt.

Manchmal wird man fälschlicherweise "Ich rufe dich 1pm EST" sagen, wenn sie eigentlich sagen wollen: "Ich rufe dich an 13 Uhr Eastern Time" was richtig berücksichtigt, ob es Sommerzeit ist oder nicht.

Diese wikipage hat ein wenig mehr Informationen.

warum kehrt getRawOffset 5 statt 4

Timezone.getRawOffset immer die Anzahl der Millisekunden für Standard Zeit gibt, die 5 * ist (60 * 60 * 1000)

Da die UTC Offset-Änderungen basierend auf dem Tag des Jahres (um DST zu berücksichtigen), müssen Sie getOffset verwenden und geben Sie das Datum an, das Sie verwenden möchten.

+0

Danke, dass getRawOffset Zweifel geklärt. Ich habe immer noch einen Zweifel TimeZone currentTimeZone = TimeZone.getTimeZone ("EST"); \t Kalender currentDt = neuer GregorianCalendar (currentTimeZone, Locale.US); \t System.out.println ("EST in Tageslicht" + TimeZone.getTimeZone ("EST"). InDaylightTime (currentDt.getTime())); druckt falsch! Warum das ? – JeeZ

Verwandte Themen