如何在Python中打印时间对象的时区?

如何在Python中打印时间对象的时区?,python,datetime,pytz,Python,Datetime,Pytz,我正在尝试以字符串形式打印时区信息,格式为'%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')) 我得到的结果

我正在尝试以字符串形式打印时区信息,格式为
'%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()
方法打印时区。

从软件包中,
%z

UTC偏移量的形式为±HHMM[SS[.ffffffff]](如果对象是原始对象,则为空字符串)

对于原始对象,将用空字符串替换%z和%z格式代码。 对于感知对象:

%z

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

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

编辑,带有修复程序

您可能希望使用
.localize()
方法,但要这样做,您需要将字符串转换为
datetime.datetime
对象,而不是
datetime.time
对象。这在某种程度上是有道理的:东京周三凌晨1点,柏林周二下午5点

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()。