Python转换Unix时间戳为UTC时间结果错误及小时差计算问题
问题原因及解决方法
时间戳转换错误的根源
你使用的1633438809404是毫秒级Unix时间戳,不符合Python各类时间转换接口的默认单位要求:
- datetime、time库默认要求传入秒级时间戳,直接传毫秒值相当于数值放大1000倍,导致年份溢出报错
- pandas转换时你指定了单位为纳秒(ns),和实际的毫秒单位不符,所以得到了1970年的错误结果
正确的UTC时间转换代码
1. datetime库实现
import datetime timestamp = 1633438809404 # 毫秒转秒,调用utcfromtimestamp直接得到UTC时间 dt_utc = datetime.datetime.utcfromtimestamp(timestamp / 1000) print(dt_utc) # 输出结果:2021-10-05 15:40:09.404000
2. time库实现
import time timestamp = 1633438809404 # gmtime返回UTC时间的struct_time对象,localtime返回的是本地时区时间 time_obj = time.gmtime(int(timestamp / 1000)) print(time_obj) # 输出:time.struct_time(tm_year=2021, tm_mon=10, tm_mday=5, tm_hour=15, tm_min=40, tm_sec=9, tm_wday=1, tm_yday=278, tm_isdst=0)
3. pandas库实现
import pandas as pd timestamp = 1633438809404 # 指定单位为毫秒ms,开启utc参数得到UTC时间 unix_conversion = pd.to_datetime(timestamp, unit='ms', utc=True) print(unix_conversion) # 输出:2021-10-05 15:40:09.404000+00:00
两个时间段小时数计算方法
拿到datetime格式的时间对象后,直接做差得到timedelta对象即可换算小时数:
import datetime # 示例两个UTC时间 dt1 = datetime.datetime.utcfromtimestamp(1633438809404 / 1000) dt2 = datetime.datetime.utcfromtimestamp(1633525209404 / 1000) # 计算时间差 delta = dt2 - dt1 # 换算为总小时数,支持小数 total_hours = delta.total_seconds() / 3600 print(total_hours) # 输出:24.0
注意:计算时间差前需确保两个时间对象的时区属性一致,否则会抛出运算错误
内容的提问来源于stack exchange,提问作者dominik
相关产品推荐
相关产品推荐

