【发布时间】:2021-12-29 13:58:19
【问题描述】:
根据python docs,datetime.toisoformat()返回一个表示日期和时间的字符串采用ISO 8601格式,但输出格式字符串可能有UTC偏移部分格式为+HH:MM[:SS[.ffffff]]。我看了又看,但在任何地方都找不到[:SS[.ffffff]] 是标准的一部分,并且一些第 3 方工具无法解析以这种方式格式化的字符串。这包括 dateutil 包,官方 python 文档将其称为“功能更全的 ISO 8601 解析器”。有人可以解释发生了什么吗,python 是直接在文档中对我们撒谎吗? ;)
如果我是对的,我想应该更新 python 的文档以提及这一点,但另一个问题是如何正确检测给定的 datetime 对象可以表示为有效的 ISO 8601 字符串。检查输出字符串总是有肮脏的选项,但我想知道是否存在更优雅的东西:)我试过了:
-
(dt.utcoffset().total_seconds() / 60).is_integer()很简单,但我不太相信以这种方式检查浮点数接近整数的程度。 -
dt.utcoffset().microseconds == 0 and dt.utcoffset().seconds % 60 == 0似乎不太容易出错,但我不确定根据模运算是否正确。
有更好的想法吗?
感谢您的帮助!
【问题讨论】:
-
不,Python 文档没有骗你,标准允许秒数包含你所指的小数部分(不是时区/偏移量)
-
@IainShelvington 不确定我是否误解了你:) Python 文档中指定的
isoformat()返回的完整模式是YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]。我的问题是指在+右侧的部分,在我的理解中是时区/偏移量。 -
@JasonS 虽然这个答案很好地解释了为什么存在亚分钟偏移,但我选择了下面的答案,因为它引用了
datetime.isoformat的标准并确认 python 文档的问题。不过在评论中提到了你的答案:)
标签: python python-3.x python-datetime iso8601