将本地时间转化成UTC时间

实际代码

在日常工作中,有些时候需要把本地时间转换成UTC时间,通常来说,最直接的方法就是把北京时间(CST时间)减去8小时,但是如果考虑到夏令时,那么这样简单的数学计算就会得到错误的结果。要解决这种涉及时区的问题,就要使用特殊的模块pytz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Python 3.6.4 (default, Sep  3 2018, 10:11:51) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime,time,pytz #引入模块
>>> now = time.strftime("%Y-%m-%d %H:%M:%S") #得到当前时间
>>> now
'2019-01-22 14:03:03'
>>> type(now)
<class 'str'> #此时类型是字符串
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2019, 1, 22, 14, 4, 49, 707859) #转换成datetime模式
>>> type(now)
<class 'datetime.datetime'>
>>> utc_time = now.astimezone(pytz.utc) #转换成了UTC时间就不要用担心夏令时等等麻烦事了
>>> print(utc_time)
2019-01-22 06:04:49.707859+00:00
>>> type(utc_time)
<class 'datetime.datetime'> #还需要将datetime格式转换成str
>>> utc_now = utc_time.strftime('%Y-%m-%d %H:%M:00')
'2019-01-22 13:57:00'
>>> type(utc_now)
<class 'str'> #此时返回了字符串

上面的代码说明了过程,以及得到的东西的类型,其实精简下来只有三行:

1
2
3
4
5
6
>>> import datetime,time,pytz
>>> now = datetime.datetime.now()
>>> utc_time = now.astimezone(pytz.utc)
>>> utc_now = utc_time.strftime('%Y-%m-%dT%H:%M:00Z')
>>> print (utc_now)
2019-01-22T06:46:00Z

如果要查时区名称,可以使用pytz.country_timezones,如下:

1
2
3
4
5
>>> from pytz import timezone 
>>> pytz.country_timezones['CN']
['Asia/Shanghai', 'Asia/Urumqi']
>>> pytz.country_timezones['US']
['America/New_York', 'America/Detroit', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Indiana/Indianapolis', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Vevay', 'America/Chicago', 'America/Indiana/Tell_City', 'America/Indiana/Knox', 'America/Menominee', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/North_Dakota/Beulah', 'America/Denver', 'America/Boise', 'America/Phoenix', 'America/Los_Angeles', 'America/Anchorage', 'America/Juneau', 'America/Sitka', 'America/Metlakatla', 'America/Yakutat', 'America/Nome', 'America/Adak', 'Pacific/Honolulu']

参考资料

https://www.cnblogs.com/cathouse/archive/2012/11/19/2777678.html
https://blog.csdn.net/junli_chen/article/details/52999448
《Python cookbook》字符串如何转化成日期
《Python cookbook》处理设计到市区的日期问题

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------