2013-04-05 6 views
6

Czym różni się EST od EST5EDT? Czy EST nie uwzględnia DST?Czym różni się EST strefy czasowej od EST5EDT?

napisałem małą java fragment, aby dowiedzieć się różnicę i wyjście mówi EST5EDT odbywa się na konto DST podczas EST nie

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 */ 

Ale poniżej urywek produkowane wyjście szokującą

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

mogłyby ktoś proszę wyjaśnić, co dokładnie się tutaj dzieje? dlaczego getRawOffset zwraca 5 zamiast 4? Jak uzyskać przesunięcie strefy czasowej za pomocą DST?

+0

unikać zarówno '' EST5EDT' EST' i identyfikatory stylu miarę możliwości. Zamiast tego używaj "America/New_York" i powiązanych identyfikatorów. [Zobacz tutaj] (http://www.nntp.perl.org/group/perl.datetime/2009/03/msg7221.html) i dup post. –

Odpowiedz

6

nie jest EST uwzględniać DST?

Nr Według definicji EST to "Wschodni czas standardowy" lub UTC-5: 00.

EDT jest "Eastern Daylight Time" Albo UTC-4: 00.

To trochę dziwne, bo na przykład New York przełącza pomiędzy EST i EDT i Seattle przełącza pomiędzy PST i PDT.

Czasami ludzie mówią niepoprawnie "zadzwonię do ciebie o 13:00 czasu wschodnioamerykańskiego", kiedy faktycznie chcą powiedzieć: "zadzwonię do ciebie o godzinie 13:00 czasu wschodniego", która odpowiednio bierze pod uwagę, czy jest to zmiana na czas letni.

Ten wikipage ma trochę więcej informacji.

dlaczego getRawOffset powrocie 5 zamiast 4

Timezone.getRawOffset zawsze zwraca liczbę milisekund dla standardowej czasu, który wynosi 5 * (60 * 60 * 1000)

Ponieważ Zmiany przesunięć UTC w zależności od dnia roku (w celu uwzględnienia czasu letniego), należy użyć getOffset i podać datę, której chcesz użyć.

+0

Dzięki, że wyjaśniono wątpliwości getRawOffset. Nadal mam jedną wątpliwość TimeZone currentTimeZone = TimeZone.getTimeZone ("EST"); \t Kalendarz currentDt = new GregorianCalendar (currentTimeZone, Locale.US); \t System.out.println ("est światła "+ TimeZone.getTimeZone (" EST") inDaylightTime (currentDt.getTime()).); drukuje fałszywe! dlaczego ? – JeeZ

Powiązane problemy