datetime时区转换

Posted 网名还没想好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datetime时区转换相关的知识,希望对你有一定的参考价值。

http://www.dannysite.com/blog/122/

Python标准库中的datetime模块提供了各种对日期和时间的处理方法。从本文的主题着手,首先利用datetime中提供的utcnow()方法获取到当前UTC时间:

1
2
3
4
>>> import datetime
>>> utc_now = datetime.datetime.utcnow()
>>> utc_now
datetime.datetime(2013124154321872000)

而此时其tzinfo为none:

1
2
>>> utc_now.tzinfo
>>>

当涉及国际时区时,时区转换则会经常使用到,比如来尝试将刚才的UTC时间转换为本地时间。对于Python3.3+版本,可以这么做:

1
2
>>> utc_now.replace(tzinfo=datetime.timezone.utc).astimezone(tz=None)
datetime.datetime(2013124234321872000, tzinfo=datetime.timezone(datetime.timedelta(028800), ‘中国标准时间‘))

不过该方法貌似并不方便,特别是在转换其他时区的时候。而对于更低版本的Python,则datetime.timezone可能压根就还没有。因此更便捷的方法是借助第三方包来实现 —— pyzt,下面就借助于它来实现时区转换:

1
2
3
4
5
6
7
8
>>> from pytz import timezone
>>> utc_now.tzinfo
>>> tzchina = timezone(‘Asia/Chongqing‘)
>>> tzchina
<DstTzInfo ‘Asia/Chongqing‘ LMT+7:06:00 STD>
>>> utc = timezone(‘UTC‘)
>>> utc_now.replace(tzinfo=utc).astimezone(tzchina)
datetime.datetime(2013124234321872000, tzinfo=<DstTzInfo ‘Asia/Chongqing‘ CST+8:00:00 STD>)

要转换为其他时区,则以此类推。

对于我自己来说,时区的转换主要出现在Django中,会经常需要将UTC时间转换为本地时间,而Django本身也已经为我们考虑到了这一点,因此实际操作起来更为方便:

1
2
3
4
5
>>> from django.utils.timezone import utc
>>> from django.utils.timezone import localtime
>>> now = datetime.datetime.utcnow().replace(tzinfo=utc)
>>> localtime(now)
datetime.datetime(20131250313122000, tzinfo=<DstTzInfo ‘Asia/Shanghai‘ CST+8:00:00 STD>)

在Python中转换时区的方法还有很多,通过探索也许还能找到更好的方法。

以上是关于datetime时区转换的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Long 类型的 datetime 转换为具有正确时区的 DateTime

python模块-pytz时区转换

datetime时区转换

C#与mongodb DateTime转换时区相差8小时

使用pytz的Datetime时区转换

python datetime时区转换