实际代码
在日常工作中,有些时候需要把本地时间转换成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
23Python 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 #引入模块
"%Y-%m-%d %H:%M:%S") #得到当前时间 now = time.strftime(
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
6import datetime,time,pytz
now = datetime.datetime.now()
utc_time = now.astimezone(pytz.utc)
'%Y-%m-%dT%H:%M:00Z') utc_now = utc_time.strftime(
print (utc_now)
2019-01-22T06:46:00Z
如果要查时区名称,可以使用pytz.country_timezones
,如下:
1
2
3
4
5from pytz import timezone
'CN'] pytz.country_timezones[
['Asia/Shanghai', 'Asia/Urumqi']
'US'] pytz.country_timezones[
['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》处理设计到市区的日期问题