Tôi đang viết một kịch bản python, trong đó có hai dòng mã chuyển đổi ngày đó đã được truyền vào phương pháp để thời gian tính theo giờ UTC:bù đắp múi giờ Python sai?
print "Timezone: %s" % get_localzone()
date = datetime.now(tz=get_localzone())
print "Local time: %s" % date
utc = pytz.utc
utc_date = date.astimezone(utc)
print "UTC date: %s" % utc_date
và kết quả là:
Timezone: America/Chicago
Local time: 2015-06-17 14:58:45.224827-05:00
UTC date: 2015-06-17 19:58:45.224827+00:00
Như bạn có thể xem chênh lệch theo giờ địa phương là "-05: 00", không có gì sai với nó, nhưng khi tôi tạo một đối tượng datetime tùy chỉnh với cùng một múi giờ:
date = datetime(2015, 6, 17, 14, 58, 45, tzinfo=get_localzone())
Kết quả trở thành s:
Timezone: America/Chicago
Local time: 2015-06-17 14:58:45-05:51
Giá trị bù trừ thay đổi từ "-05: 00" thành "-05: 51". Tôi thậm chí còn sử dụng cùng một lúc mà "datetime.now()" đầu tiên được tạo ra, và múi giờ không thay đổi, ai đó có thể giải thích cho tôi tại sao điều này xảy ra? Cảm ơn!
Cảm ơn câu trả lời chi tiết, nó đã giải quyết được vấn đề của tôi :) –
@YueQiLi: lưu ý: bạn nên sử dụng 'datetime.now (tz)' thay vì 'tz.localize (datetime.now())'. Dữ liệu sau có thể thất bại nếu giờ địa phương không rõ ràng (ví dụ: trong quá trình chuyển đổi DST). Nếu thời gian đầu vào không phải là bây giờ thì bạn có thể chuyển tham số 'is_dst' vào' tz.localize() ', để phân biệt. – jfs
@ J.F.Sebastian Cảm ơn, tôi vừa xem qua [tài liệu pytz] (http://pythonhosted.org/pytz/) và bạn nói đúng, tôi sẽ thêm mã này vào mã của tôi. Về câu hỏi tương tự khác, mặc dù thực tế là cả hai vấn đề của chúng tôi đều gây ra bởi việc lạm dụng nhà xây dựng datetime, vẫn rất khó cho những người mới bắt đầu như tôi phân loại chúng thành cùng một loại vấn đề. Việc giữ mỏ của tôi sẽ hữu ích cho những người khác để tránh loại sai lầm tân binh này :) –