从
pytz documentation:
The preferred way of dealing with times is to always work in UTC, converting to localtime only when generating output to be read by humans.
所以理想情况下你应该使用utcnow而不是现在.
假设由于某种原因你的双手被捆绑并且你需要在当地时间工作,如果你在夏令时转换窗口期间这样做,你仍然会遇到尝试本地化当前时间的问题.相同的日期时间可能会发生两次,一次是在白天时间,一次是在标准时间内,并且localize方法不知道如何解决冲突,除非您使用is_dst参数明确告诉它.
所以要获得当前的UTC时间:
utc = pytz.timezone('UTC')
now = utc.localize(datetime.datetime.utcnow())
并将其转换为您当地的时间(但仅在您必须时):
la = pytz.timezone('America/Los_Angeles')
local_time = now.astimezone(la)
编辑:正如@J.F. Sebastian的评论中所指出的,使用datetime.now(tz)的第一个例子将适用于所有情况.如上所述,您的第二个示例在秋季过渡期间失败.我仍然主张使用UTC而不是本地时间来处理除显示之外的所有内容.