Advertisement

Python 本地时间 与 UTC时间戳 互相转换

阅读量:

Python 本地时间与UTC时间戳互相转换

1. 问题

假设现在有一个UTC时区的时间戳ts,其整形格式为 1639537688

使用以下语句查看其datetime的格式,发现显示的仍然是UTC时间:”2021-12-15 11:08:08“

复制代码
    import datetime
    ts = 1639537688#UTC时间戳
    print(datetime.datetime.fromtimestamp(ts))#时间没有被转换

进一步借助timezone,却向反方向调整了,对于+8时区反而减8:“2021-12-15 03:08:08”

复制代码
    #接上段
    import dateutil.tz as tz
    print(datetime.datetime.fromtimestamp(ts , tz.tzutc()) )#错误

一种解释是:datetime的默认timezone是None,而这个None在fromtimestamp里就被当成local的时间,相当于将utc认作local,又转成utc,就反方向了。

即使可以手动设置时区,进行时间加减操作,对于其他时区的人就是很不友好的了。

2. 实现

复制代码
    import datetime
    import dateutil.tz as tz
    
    ts = 1639537688
    
    #UTC时间戳转本地datetime
    def UTCTsToLocalDt(utcts):
    
    dt = datetime.datetime.fromtimestamp(utcts)
    
    from_zone = tz.tzutc()
    to_zone = tz.tzlocal()
    
    utc = dt.replace(tzinfo=from_zone)#先行替换datetime的时区到utc时区
    local = utc.astimezone(to_zone)
    return local
    
    
    localdt = UTCTsToLocalDt(ts)
    #print(localdt.tzname()) #符合当前时区
    print(localdt.strftime("%Y-%m-%d %H:%M:%S") )#datetime格式化
    print(localdt.timestamp())#本地的时间戳:1639566488
    
    #本地时间转UTC时间戳
    def LocalDtToUTCTs(ldt):
    #利用utcfromtimestamp函数:认为输入是local,转成utc,刚好可用
    dt = datetime.datetime.utcfromtimestamp(ldt.timestamp())
    #print(dt,dt.timestamp())
    #print(dt.tzname()) #此时时区为None
    return dt.timestamp()
    
    
    print(LocalDtToUTCTs(localdt))

全部评论 (0)

还没有任何评论哟~