2011-06-20 10 views
18

Tôi đang thử tạo đối tượng datetime trong python bằng datetime và pytz, bù đắp được hiển thị sai.Đối tượng ngày giờ Python hiển thị sai lệch múi giờ

import datetime 
from pytz import timezone 

start = datetime.datetime(2011, 6, 20, 0, 0, 0, 0, timezone('Asia/Kolkata')) 
print start 

Kết quả được hiển thị là

datetime.datetime(2011, 6, 20, 0, 0, tzinfo=<DstTzInfo 'Asia/Kolkata' HMT+5:53:00 STD>) 

Lưu ý rằng 'châu Á/Kolkata' là IST là GMT + 5: 30 và không HMT + 5: 53. Đây là một múi giờ Linux chuẩn, tại sao tôi nhận được điều này sai, và làm thế nào để giải quyết nó?

+0

[công cụ báo cáo lỗi pytz] (https://bugs.launchpad.net/pytz) – kojiro

+0

@kojiro: Đó không phải lỗi. Xem http://pytz.sourceforge.net/ –

Trả lời

34

Xem: http://bytes.com/topic/python/answers/676275-pytz-giving-incorrect-offset-timezone

Trong những ý kiến, có người đề nghị sử dụng tzinfo.localize() thay vì datetime constructor, mà hiện các trick.

>>> tz = timezone('Asia/Kolkata') 
>>> dt = tz.localize(datetime.datetime(2011, 6, 20, 0, 0, 0, 0)) 
>>> dt 
datetime.datetime(2011, 6, 20, 0, 0, tzinfo=<DstTzInfo 'Asia/Kolkata' IST+5:30:00 STD>) 

CẬP NHẬT: Trên thực tế, official pytz website tiểu bang mà bạn nên luôn luôn sử dụng localize hoặc astimezone thay vì đi qua một đối tượng múi giờ để datetime.datetime.

+0

Cảm ơn điều này đã giúp rất nhiều. – compbugs

+3

Điều này thật điên rồ. Cảm ơn câu trả lời của bạn. – Simanas

+0

Lời giải thích trong liên kết byte là tuyệt vời, cảm ơn bạn vì điều này! – Maxim

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