看了一篇博文介绍的Python的内建模块datetime,恩,确实被绕晕了,写篇博客总结一下,理理思绪。
1.datetime是Python处理时间的一个标准库,在计算机中存储的时间通常是由timestamp表示的,所以,如果想要存储某个时间,需要把要存储的时间类型转换为timestamp哦
举个栗子如下:加入把当前时间转换为timestamp类型
from datetime import datetime
datetime.now().timestamp()
2.通过
datetime.strptime()
将str转为datetime
from datetime import datetime
cday = datetime.strptime('2016-6-17 16:19:59', '%Y-%m-%d %H:%M:%S')
3.本地时间转为UTC时间
>>> from datetime import datetime, timedelta, timezone
>>> tz_utc_8 = timezone(timedelta(hours=8)) # 创建时区UTC+8:00
>>> now = datetime.now()
>>> now
datetime.datetime(2016, 6, 17, 16, 2, 10, 871012)
>>> dt = now.replace(tzinfo=tz_utc_8) # 强制设置为UTC+8:00
>>> dt
datetime.datetime(2016, 6, 17, 16, 2, 10, 871012, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))
通过timezone
将时区强制转为utc+8:00
4.通过astimezone实现时区的转换
# 拿到UTC时间,并强制设置时区为UTC+0:00:
>>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
>>> print(utc_dt)
2016-06-17 16:13:12.377316+00:00
# astimezone()将转换时区为北京时间:
>>> bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
>>> print(bj_dt)
2016-06-17 16:13:12.377316+08:00
最后借用一道题目来总结下上面的知识点:
假设你获取了用户输入的日期和时间如2015-1-21 9:01:30,以及一个时区信息如UTC+5:00,均是str,请编写一个函数将其转换为timestamp:
from datetime import datetime, timezone, timedelta
def timestamp(tr_time, tr_utc):
#首先将用户输入的时间转为datetime
td_time = datetime.stamp(tr_time,'%Y-%m-%d %H:%M:%S')
#然后通过正则取得时区
td_utc=re.match(r'^UTC([+|-]\d{1,2}):00$',tr_utc).group(1)
td=timezone(timedelta(hours=int(td_utc)))
#将datetime类型的时间转为UTC时间
dt=td_time.replace(tzinfo=td)
return dt.timestamp()