2010-10-24 26 views
5

Tôi đang gặp sự cố khi hiểu sự chuyển đổi giữa múi giờ "Etc/GMT-5" và UTC trong pytz.pytz và Etc/GMT-5

>>> dt = datetime(2009, 9, 9, 10, 0) # September 9 2009, 10:00 
>>> gmt_5 = pytz.timezone("Etc/GMT-5") 
>>> gmt_5.localize(dt) 
datetime.datetime(2009, 9, 9, 10, 0, tzinfo=<StaticTzInfo 'Etc/GMT-5'>) 

Mọi thứ đều tốt đẹp cho đến nay, nhưng sau đó tôi cố gắng chuyển đổi đó để UTC:

>>> gmt_5.localize(dt).astimezone(pytz.utc) 
datetime.datetime(2009, 9, 9, 5, 0, tzinfo=<UTC>) 

Vì vậy, đối với tôi dường như khi chuyển đổi từ 10:00 tại GMT-5 đến UTC tôi nhận được 05:00? Tôi hy vọng pytz sẽ cho tôi 15:00 thay vào đó.

Tôi đang thiếu gì?

EDIT: Tôi đã xác nhận rằng múi giờ chuyển đổi cho/múi giờ Đông Mỹ chỉ hoạt động như tôi mong đợi:

>>> eastern = pytz.timezone("US/Eastern") 
>>> eastern.localize(dt) 
datetime.datetime(2009, 9, 9, 10, 0, tzinfo=...) # Too long 
>>> pytz.utc.normalize(eastern.localize(dt).astimezone(pytz.utc)) 
datetime.datetime(2009, 9, 9, 14, 0, tzinfo=<UTC>) 

EDIT 2: Tôi đã xác nhận rằng khi tôi sử dụng Etc/GMT +5 Tôi nhận được 15:00, đó là những gì tôi mong đợi để nhận được từ Etc/GMT-5. Đây có phải là lỗi pytz không?

Trả lời

10

Điều này rõ ràng là một điều POSIX. Từ Wikipedia:

Để phù hợp với kiểu POSIX, những vùng bắt đầu bằng "Etc/GMT" này có dấu hiệu đảo ngược từ những gì mọi người mong đợi nhất. Theo kiểu này, các vùng phía Tây của GMT có dấu hiệu tích cực và những dấu hiệu phía đông có dấu âm.

+0

Bạn đã đánh bại câu trả lời của riêng mình sau 23 giây! :) –

0

This bug report giải thích hành vi này. Dường như họ biết rằng nó là tất cả đảo ngược, nhưng đó là bởi vì bất cứ điều gì khác sẽ phá vỡ khả năng tương thích.

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