【问题标题】:What is the difference between the two time formats?两种时间格式有什么区别?
【发布时间】:2020-07-11 17:36:53
【问题描述】:

我的目标是使用单一字符串时间格式 (UTC)。

我从两个字符串时间戳开始:

tf1 = '2020-07-11T17:25:48.675541+0000'
tf2 = '2020-07-11T17:25:49.125175Z'

RFC3339_FORMAT = '%Y-%m-%dT%H:%M:%S.%f%z'

当我断言它们是否都是 rfc3339 格式时,它们都通过了:

from datetiem import datetime

assert datetime.strptime(tf1, RFC3339_FORMAT)
assert datetime.strptime(tf2, RFC3339_FORMAT)

这是为什么呢?

tf1tf2 有什么区别?

更一般地说,我在这里的断言有什么问题?

【问题讨论】:

  • 您需要 3.8+ 才能将“Z”识别为有效时区。如果您使用的是 3.7 或更早版本,则会收到 ValueError 且格式不匹配。

标签: python datetime time assert rfc3339


【解决方案1】:

strptime() 中的%z 格式说明符接受±HHMM[SS[.ffffff]] 格式、±HH:MM[:SS[.ffffff]] 格式或Z 的时区,相当于+00:00。见documentation中的注(6)。

请注意,这与RFC 3339 不同,后者只允许±HH:MMZ。不带冒号的时区是 ISO 8601 格式。

【讨论】:

  • 那么你是说 RFC3339 的精度不能超过秒?
  • RFC 3339 只允许精确到分钟的时区,而不是秒或秒的几分之一。请参阅第 4.2 节中的注释:按照 ISO 8601,数字偏移量仅表示与 UTC 相差整数分钟的时区。
  • 好的,知道了。因此,由于您给出的答案,我的示例有效。在这种情况下,在精确到纳秒且具有时区的字符串中表示时间的最佳方式是什么?
  • 您使用的有什么问题? %f 代表微秒。
  • 我的错-我的意思是微秒。 :) 我使用 %f。根据您的回答,我了解到%z 格式同时接受+0000Z 等。只要我以%z 接受的格式呈现时间字符串,我就可以灵活处理时间字符串?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多