将时区分配给Python日期时间

Dro*_*ror 5 python datetime pytz

假设我有一个无时区的datetime对象:

import datetime
import pytz
fmt = "%Y-%m-%d %H:%M:%S %Z%z"
dtUnaware = datetime.datetime(1979,2,20,6)
print(dtUnaware.strftime(fmt))
Run Code Online (Sandbox Code Playgroud)

这会产生:

1979-02-20 06:00:00 
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在,我想为此对象分配一个时区.好像我可以使用datetime.replace或者pytz.localize.

第一:

dtAware1 = dtUnaware.replace(tzinfo=pytz.timezone('Asia/Jerusalem'))
print(dtAware1.strftime(fmt))
Run Code Online (Sandbox Code Playgroud)

回报:1979-02-20 06:00:00 LMT+0221.其次:

dtAware2 = pytz.timezone('Asia/Jerusalem').localize(dtUnaware, is_dst=None)
print(dtAware2.strftime(fmt))
Run Code Online (Sandbox Code Playgroud)

回报1979-02-20 06:00:00 IST+0200.

第一种方法有什么问题?它似乎分配了一个错误的时区.难道我做错了什么?

Ser*_*sta 1

来自 Pytz 文档:该库与用于 tzinfo 实现的已记录的 Python API 不同;如果您想创建本地挂钟时间,您需要使用localize()本文档中记录的方法...不幸的是,如果不修改 Python 日期时间实现,这些问题就无法解决(请参阅 PEP-431)

我对此的解读是,pytz时区与标准时区并不完全相同。如果您有真正的时区,第一种方法应该很好,但您没有。