具有 ISO 格式的 Python UTC 时间戳

sh0*_*731 2 python datetime datetime-format python-datetime

我知道有人问过这个问题,但那里没有提供解决方案。 Python UTC 日期时间对象的 ISO 格式不包括 Z(祖鲁语或零偏移量)

我正在寻找一种在 Python 中使用这种格式生成 UTC 时间戳的干净方法。我需要的格式是 2013-10-29T09:38:41.341Z.

具体来说,我需要在末尾包含“Z”。Pythondatetime.utcnow().isoformat()不会在末尾附加“Z”。

请注意,手动附加“Z”不是我可以接受的解决方案。我正在寻找一种干净的方法来做到这一点。

以 ISO 格式生成后缀为 UTC 时间戳的干净方法是什么Z

Tom*_*der 6

怎么样的东西

datetime.utcnow().isoformat()[:-3] + 'Z'
Run Code Online (Sandbox Code Playgroud)

  • 正如我所写,像这样手动附加对我来说是不可接受的。这是很哈克的。 (5认同)
  • 如果您认为这是一个优雅的解决方案,那么您的标准与我的不同。我不想看到我的代码做这样的事情。在我看来,这绝对不干净。 (2认同)

小智 5

由于缺乏声誉,我将其添加为新答案。

Tomasz Swider解决方案是一个好的开始,但是[:-3]如果提供的时间没有微秒,则会减少秒数:

我将使用 utcfromtimestamp 来演示这一点:

In [10]: datetime.utcfromtimestamp(0.1).isoformat()[:-3] + 'Z'
Out[10]: '1970-01-01T00:00:00.100Z'

In [10]: datetime.utcfromtimestamp(0).isoformat()[:-3] + 'Z'
Out[11]: '1970-01-01T00:00Z'
Run Code Online (Sandbox Code Playgroud)

我认为这是一个更干净的解决方案,可以获取带有毫秒的 ISO 日期和代表祖鲁时间的“Z”:

datetime.utcnow().isoformat(timespec='milliseconds')+ 'Z'
Run Code Online (Sandbox Code Playgroud)

再次演示使用 utcfromtimestamp:

In [25]: datetime.utcfromtimestamp(0.1).isoformat(timespec='milliseconds')+ 'Z'
Out[25]: '1970-01-01T00:00:00.100Z'

In [25]: datetime.utcfromtimestamp(0).isoformat(timespec='milliseconds')+ 'Z'
Out[25]: '1970-01-01T00:00:00.000Z'
Run Code Online (Sandbox Code Playgroud)

  • 现在尝试 `datetime.datetime.now(tz=datetime.timezone.utc).isoformat()+'Z'` ,它返回 `...+00:00Z`,这是无效的。OP 有充分的理由希望避免手动添加“Z” (3认同)