How to make mistakes in Python

 

1. fromtimestamp vs utcfromtimestamp

1.1 Bug描述:

把时间戳转化成本地时间,并把它当做UTC时间保存到数据库,导致数据库内的记录看起来超前了。

1.2 示例代码:

1.3 解释说明
datetime的utcfromtimestamp方法返回的是UTC时间,而fromtimestamp则会把它转化成Local时间(我所在时区为Asia/Shanghai),所以看起来后者比前者要多8小时。

搞清楚了这个,bug就迎刃而解,把fromtimestamp换成utcfromtimestamp就行了。

说个题外话,我当初在源码里,其实写的是datetime.fromtimestamp(timestamp,tz=None)。这么写也是错的。我看了一下文档,如果tz为None,就返回Local时间(注意,返回的这个是naive的datetime),而如果给tz赋值了一个tz.gettz(‘Asia/Shanghai’)的tz对象,则相当于tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz)),返回的则是一个aware的datetime了。
举个栗子。

之前的datetime_01和datetime_02是offset-naive的datetime,而这里的datetime_03和datetime_04则是offset-aware的了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注