注意:从2020年开始,你不应该使用.utcnow()或.utcfromtimestamp(xxx)。当您已经迁移到python3时,您应该使用时区感知的datetime对象。
>>> from datetime import timezone
>>>
>>> # alternative to '.utcnow()'
>>> dt_now = datetime.datetime.now(datetime.timezone.utc)
>>>
>>> # alternative to '.utcfromtimestamp()'
>>> dt_ts = datetime.fromtimestamp(1571595618.0, tz=timezone.utc)
详情见:https://blog.ganssle.io/articles/2019/11/utcnow.html
最初的答案(2010年):
datetime模块的utcnow()函数可用于获取当前UTC时间。
>>> import datetime
>>> utc_datetime = datetime.datetime.utcnow()
>>> utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2010-02-01 06:59:19'
正如Tom上面提到的链接:http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/所说:
UTC是一个没有夏令时的时区,但仍然是一个时区
过去没有配置更改。
始终以UTC度量和存储时间。
如果你需要记录时间是在哪里花费的,分开存储。
不要保存本地时间+时区信息!
注意—如果您的任何数据位于使用夏令时的地区,请使用pytz并查看John Millikin的答案。
如果你想从一个给定的字符串中获得UTC时间,并且你足够幸运地处于世界上一个不使用夏令时的地区,或者你的数据只与UTC时间有偏移,而没有应用夏令时:
——>使用当地时间作为偏移值的基础:
>>> # Obtain the UTC Offset for the current system:
>>> UTC_OFFSET_TIMEDELTA = datetime.datetime.utcnow() - datetime.datetime.now()
>>> local_datetime = datetime.datetime.strptime("2008-09-17 14:04:00", "%Y-%m-%d %H:%M:%S")
>>> result_utc_datetime = local_datetime + UTC_OFFSET_TIMEDELTA
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'
或者,从已知偏移量开始,使用datetime.timedelta():
>>> UTC_OFFSET = 10
>>> result_utc_datetime = local_datetime - datetime.timedelta(hours=UTC_OFFSET)
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'
更新:
从python 3.2开始datetime。时区可用。你可以用下面的命令生成一个时区感知的datetime对象:
import datetime
timezone_aware_dt = datetime.datetime.now(datetime.timezone.utc)
如果你已经准备好进行时区转换,请阅读这篇文章:
https://medium.com/@eleroy/10-things-you-need-to-know-about-date-and-time-in-python-with-datetime-pytz-dateutil-timedelta-309bfbafb3f7