首页 > 解决方案 > datetime.now(tzinfo) 和 datetime.now().replace(tzinfo=tzinfo) 有什么区别?

问题描述

我注意到当我将用户输入的日期时间转换为本地化时区时,最终存储在数据库中的日期时间有六分钟的偏差,所以我发现datetime.now(tzinfo)datetime.now().replace(tzinfo=tzinfo)

>>> datetime.now(pytz.timezone('Asia/Shanghai'))
datetime.datetime(2019, 11, 12, 22, 51, 49, 495273, 
        tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)

>>> datetime.now().replace(tzinfo=pytz.timezone('Asia/Shanghai'))
datetime.datetime(2019, 11, 12, 22, 51, 51, 349327, 
        tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)

“CST+8:00:00”和“LMT+8:06:00”有什么区别,为什么?

实际上后者(带替换)是错误的,因为当我将它们转换回UTC时间时,后者(带替换)与原始时间不同:

>>> datetime.utcnow()
datetime.datetime(2019, 11, 12, 14, 51, 51, 668120)

>>> datetime.now(pytz.timezone('Asia/Shanghai')).astimezone(pytz.utc)
datetime.datetime(2019, 11, 12, 14, 51, 52, 79119, tzinfo=<UTC>)

>>> datetime.now().replace(tzinfo=pytz.timezone('Asia/Shanghai')).astimezone(pytz.utc)
datetime.datetime(2019, 11, 12, 14, 45, 54, 908616, tzinfo=<UTC>)

标签: pythondatedatetimepytz

解决方案


推荐阅读