Sử dụng tz.localize(d)
để bản địa hoá các ví dụ. Từ documentation:
Đầu tiên là sử dụng phương thức localize() do thư viện pytz cung cấp. Này được sử dụng để bản địa hoá một datetime ngây thơ (datetime không có thông tin múi giờ):
>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
>>> print(loc_dt.strftime(fmt))
2002-10-27 06:00:00 EST-0500
Nếu bạn không sử dụng tz.localize()
, nhưng sử dụng datetime.replace()
, rất có thể là một lịch sử bù đắp được sử dụng thay ; tz.localize()
sẽ chọn hiệu ứng bù đắp đúng cho ngày đã cho. Ví dụ, ngày bắt đầu và ngày kết thúc DST của miền Đông Hoa Kỳ đã thay đổi theo thời gian.
Khi bạn cố gắng bản địa hóa giá trị ngày giờ mơ hồ vì nó nằm trong khoảng thời gian chuyển tiếp từ mùa hè đến mùa đông hoặc ngược lại, múi giờ sẽ được tham khảo để xem đối tượng ngày giờ kết quả có phải trả về True hay False hay không. . Bạn có thể ghi đè mặc định cho các múi giờ với lập luận is_dst
từ khóa cho .localize()
:
dt = tz.localize(naive, is_dst=True)
hoặc thậm chí tắt sự lựa chọn hoàn toàn bằng cách thiết lập is_dst=None
. Trong trường hợp đó, hoặc trong các trường hợp hiếm hoi, là không đặt mặc định cho múi giờ, giá trị ngày giờ mơ hồ sẽ dẫn đến một ngoại lệ AmbiguousTimeError
được tăng lên. Cờ is_dst
chỉ được tham khảo cho các giá trị datetime không rõ ràng và bị bỏ qua nếu không.
Để quay trở lại theo cách khác, bật một đối tượng múi giờ nhận thức về một đối tượng ngây thơ, sử dụng .replace(tzinfo=None)
:
naivedt = awaredt.replace(tzinfo=None)
Nguồn
2012-12-21 17:31:07
Giải pháp hoàn hảo, cảm ơn. – waitingkuo
Có cách nào thuận tiện để có được 'datetime' ngây thơ từ' datetime' có tzinfo không? – waitingkuo
@waitingkuo: gọi '.replace (tzinfo = None)' trên đối tượng 'datetime'. Giá trị trả về là một thể hiện 'datetime' ngây thơ. –