如何将日期时间格式化为字符串为“yyyy-MM-dd'T'HH:mm:ss。python 中的 SSSZ'“ 格式

How to Format a datetime to String as "yyyy-MM-dd'T'HH:mm:ss.SSSZ'" format in python

提问人:andrew 提问时间:11/14/2023 最后编辑:FObersteinerandrew 更新时间:11/15/2023 访问量:65

问:

我想获取 datetime.now,但格式为“2023-11-13T02:12:01.480Z” 我尝试使用

 now = now.strftime("%Y-%m-%dT%H:%M:%S.%Z")
 

但是得到:

2023-11-15T08:27:34.

如何将日期时间格式化为字符串为“yyyy-MM-dd'T'HH:mm:ss。python 中的 SSSZ'“ 格式 有什么想法吗?

python 日期时间 格式 iso8601 rfc3339

评论

0赞 MisterMiyagi 11/15/2023
您想要指示祖鲁时间还是只是一个字面上的 Z?当你既不想要点也不想要实际时区时,为什么要使用?是否在您的控制之下和/或始终是当前时间,或者您是否必须处理任意日期时间?Z.%Znow
0赞 FObersteiner 11/15/2023
恕我直言,@MisterMiyagi在这种情况下,不表示 UTC 的文字 Z 将非常具有误导性。你关于任意日期时间的观点很好;时区可能未设置,因此转换为 UTC 不明确,并且“Z”后缀可能不正确。如果设置的时区不是 UTC,则需要在格式化为字符串之前进行转换

答:

1赞 FObersteiner 11/15/2023 #1

TL;DR 使用

from datetime import datetime, timezone

datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z")
# '2023-11-15T07:18:11.226Z'

注意:您需要将 UTC 指定为 tz 参数,才能实际获取 UTC 日期时间,而不是本地时间。datetime.now


将 DateTime 对象识别为输入

from zoneinfo import ZoneInfo
now = datetime.now(ZoneInfo("Europe/Berlin")) # UTC+1 in Nov 2023
now
# datetime.datetime(2023, 11, 15, 11, 57, 27, 899158, tzinfo=zoneinfo.ZoneInfo(key='Europe/Berlin'))

now.astimezone(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z")
# '2023-11-15T10:57:27.899Z' 

朴素的日期时间作为输入

now = datetime.now() # local time !
now
# datetime.datetime(2023, 11, 15, 11, 59, 52, 263956)

# NOTE input stays local time, no Z added:
now.isoformat(timespec="milliseconds").replace("+00:00", "Z")
# '2023-11-15T11:59:52.263'

# NOTE input *assumed* to be local time, then converted to UTC,
#      therefore the Z is added:
now.astimezone(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z")
# '2023-11-15T10:59:52.263Z'