2016-10-27 14 views
6
>>> t = datetime.datetime(2016, 11, 27, 14, 46, 0, 0) 
tz = pytz.timezone('America/Vancouver') 
utc = tz.localize(t).astimezone(pytz.utc) 
now = datetime.datetime.utcnow() 

>>> print t, tz, utc, now 
2016-11-27 14:46:00 America/Vancouver 2016-11-27 22:46:00+00:00 2016-10-27 21:49:33.723605 

Tại sao == utc 2016/11/27 : 46: 00 + 00: 00 thay vì 2016/11/27 : 46: 00 + 00: 00Chuyển đổi giờ địa phương sang UTC bằng cách sử dụng pytz thêm DST?

Cảm ơn

+0

Ý bạn là gì @roganjosh? – Rastio

Trả lời

4

Vâng, đó là bởi vì Vancouver quan sát giờ mùa hè (Xem this)

giữa ngày 13 tháng ba năm 2016 và ngày 06 tháng 11, Vancouver là UTC-7. Sau ngày 6 tháng 11, đó là UTC-8. Vì vậy, 2:46 PM (14:46) ngày hôm nay (ngày 27 tháng 10 năm 2016) vẫn nằm trong phần DST của múi giờ và sẽ là 14 + 7 = 21 (9:46 PM) ở UTC.

Tuy nhiên, vào ngày 27 tháng 11 (ngày bạn đang chuyển đổi) Vancouver đã trở lại thời gian "thường xuyên" (không phải DST), UTC-8, do đó, 14:46 chiều tại Vancouver vào ngày 27 tháng 11 năm 2016 là 14 + 8 = 22 (10:46 tối). Như một vấn đề của thực tế, nó sẽ có được như thế cho bất kỳ ngày nào sau ngày 6 tháng 11.

+1

Ồ, tốt, nó sẽ giúp ích nếu tôi biết tháng 10 là tháng thứ 10. Thanks @BorrajaX – Rastio

+0

Nhưng tại sao điều này cho tôi một đầu ra là ~ 30 phút tắt? Tôi cảm thấy tôi đang thiếu một cái gì đó ngu ngốc – roganjosh

+0

'2016-11-27 14:46:00 America/Vancouver 2016-11-27 22: 46: 00 + 00: 00 2016-10-27 22: 07: 25.008000' chạy từ UK – roganjosh

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