2013-04-05 44 views
6

Mức độ khác nhau của EST từ EST5EDT? EST có tính đến DST không?múi giờ EST khác với EST5EDT như thế nào?

Tôi đã viết một đoạn mã java nhỏ để tìm ra sự khác biệt và đầu ra nói EST5EDT mất nhập vào tài khoản DST khi EST không

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

Nhưng đoạn dưới đây được sản xuất ra gây sốc

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

Could ai đó hãy giải thích chính xác những gì đang xảy ra ở đây? tại sao getRawOffset trả về 5 thay vì 4? Làm thế nào để có được bù đắp múi giờ với DST?

+0

Tránh cả hai định danh kiểu 'EST' và' EST5EDT' bất cứ khi nào có thể. Thay vào đó, hãy sử dụng 'America/New_York' và các số nhận dạng có liên quan. [Xem tại đây] (http://www.nntp.perl.org/group/perl.datetime/2009/03/msg7221.html) và bài đăng trùng lặp. –

Trả lời

6

EST không tính đến DST?

No. Theo định nghĩa EST là "Giờ chuẩn miền đông" hoặc UTC-5: 00.

EDT là "Daylight Daylight Time" hoặc UTC-4: 00.

Có một chút khó hiểu, bởi vì ví dụ, thiết bị chuyển mạch New York giữa EST và EDT và các thiết bị chuyển mạch của Seattle giữa PST và PDT.

Thỉnh thoảng mọi người sẽ nói sai "Tôi sẽ gọi cho bạn 1 giờ chiều EST" khi họ thực sự muốn nói "Tôi sẽ gọi cho bạn 1 giờ chiều theo giờ Phương Đông".

Điều này wikipage có thêm một ít thông tin.

tại sao getRawOffset trở 5 thay vì 4

Timezone.getRawOffset luôn trả về số mili giây cho chuẩn thời gian, đó là 5 * (60 * 60 * 1000)

Kể từ khi Thay đổi Bù trừ UTC dựa vào ngày trong năm (tính đến DST), bạn sẽ cần sử dụng getOffset và cung cấp ngày mà bạn muốn sử dụng.

+0

Cảm ơn bạn đã làm rõ getRawOffset nghi ngờ. Tôi vẫn còn có một nghi ngờ TimeZone currentTimeZone = TimeZone.getTimeZone ("EST"); \t Lịch hiện tạiDt = new GregorianCalendar (currentTimeZone, Locale.US); \t System.out.println ("EST trong ánh sáng ban ngày" + TimeZone.getTimeZone ("EST"). InDaylightTime (currentDt.getTime())); in sai! tại sao vậy ? – JeeZ

Các vấn đề liên quan