Python 何时使用datetime.utcnow()或datetime.now(tz=pytz.utc).replace(tzinfo=None)
我想了解我应该何时使用Python 何时使用datetime.utcnow()或datetime.now(tz=pytz.utc).replace(tzinfo=None),python,datetime,timezone,pytz,Python,Datetime,Timezone,Pytz,我想了解我应该何时使用 datetime.now(tz=pytz.utc).replace(tzinfo=None) 而不是简单地 datetime.utcnow() 后者是否会不考虑夏时制等因素?很多如何使用日期时间。日期时间的工作方式取决于运行它的机器。主机的本地时间和时区设置将决定您将获得的输出 如果主机位于UTC时区,则datetime.datetime.now()和datetime.datetime.utcnow()之间将没有差异 根据报告: 处理时间的首选方法是始终以UTC工作,
datetime.now(tz=pytz.utc).replace(tzinfo=None)
而不是简单地
datetime.utcnow()
后者是否会不考虑夏时制等因素?很多如何使用日期时间。日期时间的工作方式取决于运行它的机器。主机的本地时间和时区设置将决定您将获得的输出 如果主机位于UTC时区,则
datetime.datetime.now()和datetime.datetime.utcnow()之间将没有差异
根据报告:
处理时间的首选方法是始终以UTC工作,仅当生成供人读取的输出时才转换为localtime
pytz
用于计算夏令时,datetime.datetime.utcnow()
用于提供一个通用的标准化参考点,您可以根据该点计算夏令时datetime.datetime.utcnow()
本身不会考虑夏令时。你永远不应该使用datetime.utcnow()
,因为它会给你一个天真的时间戳,你可以用它射自己的脚。如果你真的想要一个幼稚的时间戳,使用你的第一个选项使它显式now()
接受tz参数(您应该始终提供该参数,以避免使用主机tz)。但是utcnow()
显然没有提供这一点。所以这是注定的
例如,假设您有UTC时间戳,并且希望将其转换为墨西哥城的本地时间:
my_timestamp.astimezone(pytz.timezone("America/Mexico_City"))
看起来不错,对吧?不,看看这个:
>>> datetime.utcnow()
datetime.datetime(2021, 3, 29, 21, 40, 44, 329559)
>>> datetime.utcnow().astimezone(pytz.timezone("America/Mexico_City"))
datetime.datetime(2021, 3, 29, 21, 40, 44, 329559, tzinfo=<DstTzInfo 'America/Mexico_City' CST-1 day, 18:00:00 STD>)
>datetime.utcnow()
datetime.datetime(2021,3,29,21,40,44,329559)
>>>datetime.utcnow().astimezone(pytz.timezone(“美国/墨西哥城”))
datetime.datetime(2021,3,29,21,40,44,329559,tzinfo=)
正如您所看到的,astimezone
如果您给它一个天真的时间戳,它只会在tz上加上标签,而不会像预期的那样调整实际时间。(如果您不想调整,您应该使用.replace
)
这非常令人困惑,如果你只是确保没有天真的时间戳,你就不会遇到这样的问题。如果您愿意,您可以将它们放在外部API中,但在它们进入系统时附加一个时区
总而言之:总是使用datetime.now(tz=some_tz)