【问题标题】:python Incorrect date when converting unix time to utc time [duplicate]python将unix时间转换为utc时间时日期不正确[重复]
【发布时间】:2021-12-07 16:05:32
【问题描述】:

我想将 unix 时间戳转换为 UTC 时间。我必须使用下面的代码对其进行转换,但每次我得到的结果都不正确。在线日期转换器返回正确的结果。如何将日期转换为两个时段之间的小时数?

import datetime

print(datetime.datetime.fromtimestamp(1633438809404))
ValueError: year 53731 is out of range


import time

epoch = 1633438809404
time_obj = time.localtime(int(epoch))
print(time_obj)

time.struct_time(tm_year=53731, tm_mon=8, tm_mday=13, tm_hour=18, tm_min=36, tm_sec=44, tm_wday=0, tm_yday=225, tm_isdst=0)


import pandas

timestamp = 1633438809404
unix_conversion=pandas.to_datetime(timestamp, unit='ns')
print(str(unix_conversion))

1970-01-01 00:27:13.438809404

【问题讨论】:

  • 预期结果是什么?

标签: python pandas date datetime unix


【解决方案1】:

您提供的时间戳 (1633438809404) 是时间戳以毫秒为单位,是吗?如果是这样,则将其除以 1000,然后再将其提供给 datetime.datetime.fromtimestamp(需要以秒为单位的时间戳):

>>> datetime.fromtimestamp(1633438809404/1000)
datetime.datetime(2021, 10, 5, 9, 0, 9, 404000)

或者,在使用pandas.to_datetime 时,请确保使用unit='ms'

>>> timestamp = 1633438809404
>>> unix_conversion=pandas.to_datetime(timestamp, unit='ms')
>>> unix_conversion
Timestamp('2021-10-05 13:00:09.404000')

【讨论】:

  • fromtimestamp 接受参数 tz,因此如果 OP 需要 UTC,则应将其设置为 datetime.timezone.utcpd.to_datetime也一样,这里可以设置utc=True
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多