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

Python 本地时间 与 UTC时间戳 互相转换,第1张

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))

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5670343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存