假设现在有一个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条)