在Python中将字符串格式的ISO日期转换为纪元

问题描述 投票:0回答:2

我有一个字符串格式的日期

2021-12-14T12:05:51.8031499
我怎样才能得到它的 Epoch 值?

python datetime iso8601
2个回答
3
投票

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() 


2
投票

将日期字符串解析为日期时间对象,然后使用 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()
会创建一个时区感知的日期时间对象。

© www.soinside.com 2019 - 2024. All rights reserved.