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

时间:2018-12-23 19:54:15

标签: 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'))

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

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

1 个答案:

答案 0 :(得分: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'))