【问题标题】:How to print out the timezone for a time object in Python?如何在 Python 中打印出时间对象的时区?
【发布时间】:2019-05-23 05:19:11
【问题描述】:

我正在尝试以'%H:%M:%S%z' 格式将时区信息作为字符串打印出来。为此,我正在执行以下操作:

import pytz
import datetime

tz = pytz.timezone('Africa/Cairo')
time = datetime.datetime.strptime('14:24:41', '%H:%M:%S').time()
time = time.replace(tzinfo=tz)

print(time.strftime('%H:%M:%S%z'))

我得到的结果只是'14:24:41',即使替换了tzinfo。我在这里做错了什么?

编辑 这个问题不是重复的,因为另一个问题没有解释为什么没有使用strftime() 方法打印时区。

【问题讨论】:

标签: python datetime pytz


【解决方案1】:

来自datetime 包,%z

格式为 ±HHMM[SS[.ffffff]] 的 UTC 偏移量(如果对象是幼稚的,则为空字符串)。

对于一个简单的对象,%z 和 %Z 格式代码被替换为空字符串。 对于有意识的对象:

%z

utcoffset() 转换为形式为 ±HHMM[SS[.ffffff]] 的字符串,其中 HH 是 2 位字符串,给出 UTC 偏移小时数,MM 是 2 位字符串,给出数字UTC 偏移分钟数,SS 是一个 2 位字符串,给出 UTC 偏移秒数,ffffff 是一个 6 位字符串,给出 UTC 偏移微秒数。

使用您的示例代码,time.utcoffset() 返回空。

编辑,修复

您可能想要使用.localize() 方法,但要这样做,您需要将字符串转换为datetime.datetime 而不是datetime.time 对象。这在某种程度上是有道理的:东京的星期三 0100,星期二柏林的 1700。

import pytz
import datetime

tz = pytz.timezone('Africa/Cairo')
dt = datetime.datetime.strptime('14:24:41', '%H:%M:%S')
time = tz.localize(dt)

print(time.strftime('%H:%M:%S%z'))

【讨论】:

  • 这很有趣。那么,您如何实际设置时间对象的时区?因为,显然使用time.replace(tzinfo=tz) 不起作用。
  • 我编辑为您的示例添加了修复程序。如果您确实需要使用 datetime.time 对象,则应在添加 TZ 偏移后调用 .time()
  • 非常感谢,这解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 2011-09-19
  • 2016-02-17
相关资源
最近更新 更多