关于时区的问题,推荐参考pytz 模块官方文档
链接地址: https://pypi.org/project/pytz/
import dateutil.parser
import pytz
import time
from datetime import datetime
datestring = '2018-05-17T04:00:00.000Z'
local_time = dateutil.parser.parse(datestring).astimezone(pytz.timezone('Asia/Shanghai')) # 解析string 并转换为北京时区
print(local_time , type(local_time)) # datetime 类型
da = datetime.strftime( local_time,'%Y-%m-%d %H:%M:%S') # 将datetime转换为string
print(da)
last_id = time.mktime(local_time.timetuple()) # 将datetime转换到时间戳
print(last_id)
localtime = time.localtime(last_id) # 时间戳转换为本地时间
1 输入: ‘2018-05-17T04:00:00.000Z’ string
输出:‘2018-05-17 12:00:00’ 将utc 时间转换为北京时间
代码:
def utc2local(datestring=''): # utc string - local string
import dateutil.parser
import pytz
from datetime import datetime
datestring = '2018-05-17T04:00:00.000Z'
local_time = dateutil.parser.parse(datestring).astimezone(pytz.timezone('Asia/Shanghai')) # 解析string 并转换为北京时区
print(local_time , type(local_time)) # datetime 类型
da = datetime.strftime( local_time,'%Y-%m-%d %H:%M:%S') # 将datetime转换为string
print(da)
return da
2 根据end_time 往前推start_time
def tzname( dt): # tzname需要返回时区名
return dt+'+08:00'
def get_start_time(end_time='',period = '60min'):
"""
:param end_time: string 类型 根据end_time 往前推到 start_time , 并前时间转换为iso 8601 北京时区时间
:param period:
:return:
"""
if period == '1day' or period =='1week' :
end_time = datetime.strptime(end_time, "%Y-%m-%d")
else:
end_time = datetime.strptime(end_time,"%Y-%m-%d %H:%M:%S")
max_reqeusts = 100
seconds = int(INTERVAL_MAP[period])
delta = timedelta(seconds=seconds)
start_time = end_time - delta * max_reqeusts
end_time = datetime.isoformat(end_time)
start_time = datetime.isoformat(start_time)
return tzname(start_time) , tzname(end_time)
3 将datetime 转化为 时间戳
def time2int(dtime): # 将datetime 字符串转化为 时间戳
from dateutil.parser import parse
dtime = parse(dtime)
dtime = dtime.timetuple() # 将datetime 转化为time
dtime = time.mktime(dtime) # 将time 转化为 timestamp float
return int(dtime) # 返回整形
4 将native time(不带时区的时间) 字符串 转换成北京时间的字符串
def native2local(datestring=''): # string native time -- local time string
import dateutil.parser
import pytz
fmt = '%Y-%m-%d %H:%M:%S'
dtime = dateutil.parser.parse(datestring) # 解析字符串时间为native time: 不带时区时间
dtime = pytz.utc.localize(dtime) # 创建 localized time
dtime = dtime.astimezone(pytz.timezone('Asia/Shanghai')) # 变换时区信息
dtime = dtime.strftime(fmt) # datetime 变成 字符串
return dtime