【问题标题】:Python `strptime` missing "T" and "Z" when printing?打印时Python`strptime`缺少“T”和“Z”?
【发布时间】:2020-11-01 18:21:43
【问题描述】:

我在这里错过了什么?

为什么会这样……

import datetime

start_date = '2020-10-01T00:00:00Z'
start_date_obj = datetime.datetime.strptime(start_date, '%Y-%m-%dT%H:%M:%SZ')

print(start_date_obj)

...结果: 2020-10-01 00:00:00

...而不是: 2020-10-01T00:00:00Z ?

输出中的“T”和“Z”在哪里?

【问题讨论】:

  • 请注意,当您调用 print(datetime_object) 时,会调用 datetime 对象的 __str__ 方法 - 这恰好为您提供了带有空格作为日期/时间分隔符的 isoformat。这只是一个展示的问题,仅此而已。如果您想要特定格式的字符串,请参阅我的答案。
  • 这能回答你的问题吗? How do I parse an ISO 8601-formatted date?

标签: python utc python-datetime


【解决方案1】:

Z 表示 UTC,因此您应该使用 strptime%z 指令解析到可感知的日期时间对象:

from datetime import datetime

s = '2020-10-01T00:00:00Z'
dt = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S%z')
print(dt)
# 2020-10-01 00:00:00+00:00

fromisoformat 加一点hack

dt = datetime.fromisoformat(s.replace('Z', '+00:00'))
print(dt)
# 2020-10-01 00:00:00+00:00

转换回字符串时也可以这样做:

out = dt.isoformat().replace('+00:00', 'Z')
print(out)
# 2020-10-01T00:00:00Z

strftime 不会给你Z 但例如UTC

out = dt.strftime('%Y-%m-%dT%H:%M:%S %Z')
print(out)
# 2020-10-01T00:00:00 UTC

【讨论】:

    【解决方案2】:

    无视。显然我需要从 datetime 对象转换回字符串(?)才能很好地打印出来?

    import datetime
    
    start_date = '2020-10-01T00:00:00Z'
    start_date_obj = datetime.datetime.strptime(start_date, '%Y-%m-%dT%H:%M:%SZ')
    start_date_printable = datetime.datetime.strftime(start_date_obj, '%Y-%m-%dT%H:%M:%SZ')
    
    print(start_date_printable)
    

    结果: 2020-10-01T00:00:00Z

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2012-12-22
      • 1970-01-01
      相关资源
      最近更新 更多