python datetime utc 转换

    关于时区的问题,推荐参考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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值