是否有一种简单的方法将RFC 3339纳米时间转换为常规的Python时间戳?
例如time = '2022-07-14T12:01:25.225089838+08:00',我找到了使用datetime的方法
from datetime import datetime
time = '2022-07-14T12:01:25.225089+08:00'
date = datetime.fromisoformat(time) # good
time = '2022-07-14T12:01:25.225089838+08:00'
date = datetime.fromisoformat(time) # error
它适用于'2022-07-14T12:01:25.225089+08:00'这样的字符串,但它不适用于上面的时间。
有几种方法可以做到这一点。这取决于输入格式是什么以及如何定义一个简单的方法。实际上有很多帖子问你类似的问题。如果你有兴趣的话,我将在最后贴出一些供你参考,请在下次贴出之前检查一下。
datetime对象的主要问题是它在秒后只保存6个数字。如果你想保留所有的数字,你需要一个不同的数据结构来保存它。
如果你能接受在6位截断,FObersteiner的答案是完美的。另一个方法是香草datetime字符串解析
from datetime import datetime
date = '2022-07-14T12:01:25.225089838+08:00'.removesuffix('+08:00')
x = datetime.strptime( date[:-3], '%Y-%m-%dT%H:%M:%S.%f')
如果你想保留所有的数字。你可能想从datetime类扩展创建你自己的类,或者为它创建一些函数。
将RFC 3339时间转换为标准Python时间戳
解析包含纳秒的日期时间字符串
from datetime.fromisoformat docs:
警告:此操作不支持解析任意ISO 8601字符串——它仅用作datetime.isoformat()的逆操作。一个功能更全面的ISO 8601解析器dateutil.parser. isopparse可在第三方包dateutil中获得。
dateutil的isopparse将完成这项工作:
from dateutil.parser import isoparse
time = '2022-07-14T12:01:25.225089838+08:00'
date = isoparse(time)
print(date)
# 2022-07-14 12:01:25.225089+08:00
print(repr(date))
# datetime.datetime(2022, 7, 14, 12, 1, 25, 225089, tzinfo=tzoffset(None, 28800))
注意:它不会四舍五入到微秒,它只是将小数点后3位切掉。基本上,如果你处理的是RFC 3339这样的标准化格式,你可以自己做切片,比如
from datetime import datetime
time = '2022-07-14T12:01:25.225089838+08:00'
date = datetime.fromisoformat(time[:-9] + time[-6:])
print(date)
# 2022-07-14 12:01:25.225089+08:00