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)
还没有任何评论哟~
