2011-10-24 59 views
7

Được chơi xung quanh với múi giờ Joda và tìm thấy những thứ sau có vẻ lạ.Tính toán múi giờ Joda

Tôi chạy đoạn mã sau

DateTimeZone gmt = DateTimeZone.forID("Etc/GMT"); 
    DateTimeZone gmtPlusOne = DateTimeZone.forID("Etc/GMT+1"); 
    DateTimeZone gmtMinusOne = DateTimeZone.forID("Etc/GMT-1"); 

    System.out.println(new DateTime(gmt).toString()); 
    System.out.println(new DateTime(gmtPlusOne).toString()); 
    System.out.println(new DateTime(gmtMinusOne).toString()); 

Và có đầu ra sau đây

2011-10-24T13:00:12.890Z 
2011-10-24T12:00:12.937-01:00 
2011-10-24T14:00:12.937+01:00 

Tôi là một chút ngạc nhiên khi thấy "gmtPlusOne" sắp ra như một giờ sau với -01: 00 và ngược lại cho "gmtMinusOne". Ai đó có thể giải thích lý do tại sao những điều này xảy ra như thế này vì tôi đã mong đợi điều ngược lại.

+2

Don' t lo lắng Jon sẽ ở đây bất cứ lúc nào ;-) – Voo

Trả lời

15

Tài liệu này http://joda-time.sourceforge.net/timezones.html giải thích lý do cho hành vi không trực quan này. Nó cho biết Etc/GMT+1 có độ lệch chuẩn là -1:00Etc/GMT-1 có độ lệch chuẩn là +1:00. Điều này đảo ngược của bù đắp giữ cho bất kỳ Etc/GMT+n.

Từ wiki

Khu vực đặc biệt của Etc được sử dụng đối với một số khu hành chính, đặc biệt đối với "Etc/UTC" đại diện phối hợp quốc tế Time. Để phù hợp với phong cách POSIX, các tên khu vực đó bắt đầu bằng "Etc/GMT" có dấu hiệu của họ được đảo ngược từ những gì nhiều nhất mọi người mong đợi. Trong phong cách này, khu phía tây của giờ có một dấu hiệu tích cực và những đông có một dấu hiệu tiêu cực trong tên của họ (ví dụ: "Etc/GMT-14" là 14 giờ trước/phía đông của giờ GMT.)

+0

Apple thảo luận vấn đề POSIX này trong [tệp văn bản này] (http://opensource.apple.com/source/system_cmds/system_cmds-230/zic.tproj/datfiles/etcetera) . 'Chúng tôi sử dụng dấu hiệu kiểu POSIX trong tên Khu vực và chữ viết tắt đầu ra, mặc dù điều này trái ngược với những gì nhiều người mong đợi. POSIX có dấu hiệu tích cực về phía tây của Greenwich, nhưng nhiều người mong đợi những dấu hiệu tích cực về phía đông của Greenwich. Ví dụ, TZ = 'Etc/GMT + 4' sử dụng từ viết tắt "GMT + 4" và tương ứng với 4 giờ sau UTC (phía tây Greenwich) mặc dù nhiều người mong đợi nó có nghĩa là 4 giờ trước UTC (tức là đông của Greenwich). ' –

+0

Những' Etc' này không cần thiết. Sử dụng [tên múi giờ thích hợp] (http://en.wikipedia.org/wiki/List_of_tz_database_time_zones), thường là một lục địa + dấu gạch chéo + thành phố/khu vực như 'Châu Á/Kolkata' hoặc' Mỹ/Montreal'. –

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