2009-09-14 33 views
18

Tôi đang đọc không đầy đủ như vậy pytz documentation và tôi bị mắc kẹt trên hiểu một phần của nó.pytz: Tại sao bình thường hóa cần thiết khi chuyển đổi giữa các múi giờ?

Việc chuyển đổi giữa các múi giờ cũng cần được chú ý đặc biệt. Điều này cũng cần phải sử dụng phương pháp chuẩn hóa để đảm bảo chuyển đổi là chính xác.

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899)) 
>>> utc_dt.strftime(fmt) 
'2006-03-26 21:34:59 UTC+0000' 
>>> au_tz = timezone('Australia/Sydney') 
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz)) 
>>> au_dt.strftime(fmt) 
'2006-03-27 08:34:59 EST+1100' 
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc)) 
>>> utc_dt2.strftime(fmt) 
'2006-03-26 21:34:59 UTC+0000' 

tôi đã cố gắng dụ này rất mà không sử dụng normalize và nó bật ra chỉ giống nhau. Theo tôi, ví dụ này không thực sự giải thích được lý do tại sao chúng tôi phải sử dụng normalize khi chuyển đổi giữa các đối tượng trong các múi giờ khác nhau.

Ai đó vui lòng cung cấp cho tôi ví dụ (giống như ở trên) trong đó kết quả khác khi không sử dụng normalize.

Cảm ơn

+0

xem [Bình thường hóa vẫn cần thiết khi chuyển sang múi giờ địa phương?] (Https://answers.launchpad.net/pytz/+question/249229) – jfs

Trả lời

8

Từ các tài liệu pytz:

Bên cạnh đó, nếu bạn thực hiện ngày số học về thời gian địa phương mà vượt qua ranh giới DST, kết quả có thể trong một múi giờ không chính xác (tức là trừ 1 phút. từ 2002-10-27 1:00 EST và bạn nhận được 2002-10-27 0:59 EST thay vì chính xác 2002-10-27 1:59 EDT). Phương thức normalize() được cung cấp để sửa lỗi này. Thật không may những vấn đề này không thể được giải quyết mà không sửa đổi việc thực hiện datetime Python.

+2

trích dẫn này không giải thích tại sao bạn cần 'tz.normalize() 'sau' .astimezone (tz) 'gọi – jfs

+4

[nó được xác nhận] (https://answers.launchpad.net/pytz/+question/249229): *" Khi chuyển đổi giữa các múi giờ, '.astimezone()' nên là tất cả những gì cần thiết. "* nghĩa là, bạn không cần' tz.normalize() 'sau' .astimezone (tz) '. – jfs

6

Các tài liệu nói bình thường hóa được sử dụng như một cách giải quyết cho vấn đề DST:

Bên cạnh đó, nếu bạn thực hiện ngày số học về thời gian địa phương mà vượt qua ranh giới DST, kết quả có thể trong một múi giờ không chính xác (ví dụ: trừ 1 phút từ 2002-10-27 1:00 EST và bạn nhận được 2002-10-27 0:59 EST thay vì đúng 2002-10-27 1:59 EDT). Phương thức normalize() được cung cấp để sửa lỗi này.

Vì vậy, nó được sử dụng để sửa một số trường hợp cạnh liên quan đến DST. Nếu bạn không sử dụng múi giờ DST (ví dụ: UTC) thì không cần sử dụng bình thường hóa.

Nếu bạn không sử dụng, chuyển đổi của bạn có thể mất một giờ trong một số trường hợp nhất định.

+0

Đúng, đó thực sự là vấn đề liên quan đến DST. –

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