【发布时间】:2021-12-14 15:16:39
【问题描述】:
我有一个字符串格式的日期2021-12-14T12:05:51.8031499
我怎样才能得到这个的 Epoch 值?
【问题讨论】:
-
看起来您的时间戳的微秒数过多而无效
我有一个字符串格式的日期2021-12-14T12:05:51.8031499
我怎样才能得到这个的 Epoch 值?
【问题讨论】:
dateutil 是你的朋友,也是 7 位小数秒:
from dateutil.parser import isoparse
isoparse("2021-12-14T12:05:51.8031499")
Out[2]: datetime.datetime(2021, 12, 14, 12, 5, 51, 803149)
isoparse("2021-12-14T12:05:51.8031499").timestamp()
Out[3]: 1639479951.803149
注意:给定 ISO 格式的日期/时间将生成 naive datetime object,Python 会将其视为本地时间,即它将从您机器的本地时间设置转换为 Unix 时间之前的 UTC为timestamp() 计算!
【讨论】:
将日期字符串解析为日期时间对象,然后使用utcfromtimestamp() 函数从中返回纪元时间。
请注意,示例时间中有一位额外的数字。 Python 日期时间中的预期微秒数是 6 位数而不是 7(例如 803149)。
from datetime import datetime, timezone
d = '2021-12-14T12:05:51.803149'
dt = datetime.strptime(d, '%Y-%m-%dT%H:%M:%S.%f')
print(dt)
# convert datetime to time-aware timezone at UTC
# so correct timestamp is returned
dt = dt.replace(tzinfo=timezone.utc)
# Return the time in seconds since the epoch
seconds_since_epoch = dt.timestamp()
print(seconds_since_epoch)
# convert epoch back to datetime object
d2 = datetime.utcfromtimestamp(seconds_since_epoch)
print(d2)
输出:
2021-12-14 12:05:51.803149
1639483551.803149
2021-12-14 12:05:51.803149
【讨论】: