我有一个字符串格式的日期
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 对象,Python 将其视为 本地时间,即在计算 Unix 时间之前,它将从计算机的本地时间设置转换为 UTC
timestamp()
!
将日期字符串解析为日期时间对象,然后使用 utcfromtimestamp() 函数从中返回纪元时间。也可以拨打
datetime.fromtimestamp(time, tz=timezone.utc)
。
请注意,示例时间中有一位额外的数字。 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)
d3 = datetime.fromtimestamp(seconds_since_epoch, tz=timezone.utc)
print(d3)
输出:
2021-12-14 12:05:51.803149
1639483551.803149
2021-12-14 12:05:51.803149
2021-12-14T12:05:51.803149
2021-12-14 12:05:51.803149+00:00
注意,使用 tz 参数调用
fromtimestamp()
会创建一个时区感知的日期时间对象。