我有一组19位数的时间戳。stamp
我不知道如何转换为日期时间格式。
stamp
相当于 dt
.dt
已经转换为datetime和unix时间戳。我看了类似的SO帖子,这不仅仅是除以1000000000的问题。此外,它不 似乎 是一个双重问题,如从 如何将一个很长的时间戳转换为日期时间(19位) (9876432101234567890).
例子。
import pandas as pd
data = {'stamp': [1264604283246383104, 1266445459956158467, 1269744490329358337, 1270363071710715905],
'dt': ['May 24 2020 13:08 EST', 'May 29 2020 15:05 EST', 'Jun 7 2020 17:34 EST', 'Jun 9 2020 10:32 EST']}
df = pd.DataFrame(data)
# move timezone to a separate column
df['tz'] = df['dt'].str[-4:]
df['dt'] = df['dt'].str.replace(' EST', '')
# convert dt to UTC datetime
df['datetime'] = pd.to_datetime(df['dt']).dt.tz_localize(tz='US/Eastern').dt.tz_convert('UTC')
# convert datetime to unix datetime
df['datetime_unix'] = df['datetime'].astype(int)
stamp dt tz datetime datetime_unix
0 1264604283246383104 May 24 2020 13:08 EST 2020-05-24 17:08:00+00:00 1590340080000000000
1 1266445459956158467 May 29 2020 15:05 EST 2020-05-29 19:05:00+00:00 1590779100000000000
2 1269744490329358337 Jun 7 2020 17:34 EST 2020-06-07 21:34:00+00:00 1591565640000000000
3 1270363071710715905 Jun 9 2020 10:32 EST 2020-06-09 14:32:00+00:00 1591713120000000000
关于这是什么以及如何通过Python转换的想法?
stamp
到相应的 dt
.那个时间戳格式是一致的,但是无厘头。通过做 (1270363071710715905 - 1264604283246383104)/(Jun 9 2020 10:32 EST - May 24 2020 13:08 EST)
我们确定您的时间戳以大约4.2GHz的速度跳动。然后通过 Jun 9 2020 10:32 EST - 1270363071710715905/4.2GHz
我们确定你的时间戳的年代是在2010年11月初。我不知道有什么常见的或知名的时间戳具有这些属性,但这些信息足以让你能够将任意时间转换为它。
Joseph Sible-恢复莫妮卡 很好的解释了解决你问题的步骤。 但是答案中缺少具体的内容和代码,所以我想我可以帮你补上。
如果时间戳数字和datetime之间存在线性关系,只需要每个样本的两个样本就可以建立关系。 如你所做的更多,就有可能测试解决方案,并确信这种关系真的是线性的。
>>> import datetime as dt
>>> date_list=[(1264604283246383104, dt.datetime(2020,5,24, 13,8)),
(1266445459956158467, dt.datetime(2020,5,29, 15,5)),
(1269744490329358337, dt.datetime(2020,6,7, 17,34)),
(1270363071710715905, dt.datetime(2020,6,9, 10,32))]
>>> freq = (date_list[-1][0] - date_list[0][0]) / (date_list[-1][1] - date_list[0][1]).total_seconds()
>>> freq
4194188417.185807
>>> epoch = date_list[0][1] - dt.timedelta(seconds=date_list[0][0] / freq)
>>> epoch
datetime.datetime(2010, 11, 3, 19, 23, 34, 828853)
>>> def stamp_to_dt(stamp):
return epoch + dt.timedelta(seconds=stamp/freq)
>>> for stamp, date in date_list:
print(stamp, date, stamp_to_dt(stamp))
1264604283246383104 2020-05-24 13:08:00 2020-05-24 13:08:00
1266445459956158467 2020-05-29 15:05:00 2020-05-29 15:04:22.832110
1269744490329358337 2020-06-07 17:34:00 2020-06-07 17:33:54.641731
1270363071710715905 2020-06-09 10:32:00 2020-06-09 10:32:00
正如你所看到的,函数输出与预期的结果非常吻合。 它与第一个和最后一个完全匹配,因为这两个是用来计算转换因子的。