本文介绍了pytz库中 Asia/Shanghai
时区相差6分钟的问题。
之前也一直没有注意到这个问题,最近的项目需要同时显示DTU设备时间和服务器时间,才发现设备时间总是少6-7分钟。
在项目中,两者解析成datetime对象的使用方法不一样:
- 服务器用的是Django框架,使用了django.utils.timezone.now函数解析服务器当前时间
- DTU则是自己通过构造函数创建的,时区用的是pytz.timezone(‘Asia/Shanghai’)
首先在一篇文章《用datetime和pytz来转换时区》中说可以用台北时间(Asia/Taipei),试验下发现台北时间也有6分钟的问题。为了测试通过临时强制加上了6分钟,才勉强通过测试,然而这不是长久之计。
晚上下班时回家用“pytz 6分钟”搜索发现了《python中pytz,东8区,6分钟问题 - 老楠老楠》这篇文章。根据文章的描述,用localize函数就可以了。
使用datetime直接构造时间的时候,设置时区是没有北京时间的,一般来说习惯了linux的同志都会默认用上海时间来代替,这里却有一个问题,如果要进行时区转换,上海时间比北京时间差6分钟。。。
比如:
1 | tz = pytz.timezone('Asia/Shanghai') |
这样打印出来得到的时间是:
1 | 2015-09-07 09:00:00+08:06 |
在django框架中,貌似from django.utils.timezone import localtime的这个localtime会修正那6分钟,这问题就来了,要自己在程序里构造时间,并且跟用这个localtime转化的时间对比的时候巨麻烦。