代码改变世界

pytz 格式化北京时间 6分钟问题

2018-03-02 12:00  cmsd  阅读(1503)  评论(0编辑  收藏  举报
使用datetime直接构造时间的时候,设置时区是没有北京时间的,一般来说习惯了linux的同志都会默认用上海时间来代替,这里却有一个问题,如果要进行时区转换,上海时间比北京时间差6分钟。。。

比如:

tz = pytz.timezone('Asia/Shanghai')
t = datetime.datetime(2015, 9, 5, 9, 0, 0, 0, tzinfo=tz)
这样打印出来得到的时间是:
2015-09-07 09:00:00+08:06

在django框架中,貌似from django.utils.timezone import localtime的这个localtime会修正那6分钟,这问题就来了,要自己在程序里构造时间,并且跟用这个localtime转化的时间对比的时候巨麻烦。

解决方法:

tz = pytz.timezone('Asia/Shanghai')
t = datetime.datetime(start_time.year, start_time.month, start_time.day, 9, 0, 0, 0)
t = tz.localize(t)

这样打印出来的就没有那个讨厌的:06了。
2015-09-07 09:00:00+08:00