当我从Facebook Graph中拉出事件开始时间时会出现以下形式:
2017-09-26T18:00:00+0300
我想将其转换为可读格式,所以我使用它:
readable_event_date = dateutil.parser.parse(event_date).strftime('%a, %b %d %Y %H:%M:%S')
它出现了这样:
Tue, 26 Sep 2017 18:00:00
哪个好,但是它失去了UTC的偏移量,而且我喜欢AM PM格式。
因此,我希望这样:
Tue, 26 Sep 2017 9:00 PM
答案 0 :(得分:1)
进入12小时格式并保持与UTC的偏移以进行打印:
from dateutil.parser import parse
event_date = '2017-09-26T18:00:0+0300'
date = parse(event_date)
offset = date.tzinfo._offset
readable_event_date = (date + offset).strftime('%a, %b %d %Y %I:%M:%S %p')
print(readable_event_date)
输出:
'Tue, Sep 26 2017 09:00:00 PM'
答案 1 :(得分:1)
看起来你想要的是这次,用UTC表示,格式为'%a, %b %d %Y %I:%M:%S %p'
。幸运的是,您执行此操作所需的所有信息都包含在您解析的datetime
对象中,您只需要转换为UTC
Python 2.6+或Python 3.3 + :
您使用dateutil
采用的方法适用于Python 2.6+或Python 3.3。+(并且适用于各种日期时间字符串格式):
from dateutil.parser import parse
# In Python 2.7, you need to use another one
from dateutil.tz import tzutc
UTC = tzutc()
dt_str = '2017-09-26T18:00:00+0300'
dt = parse(dt_str)
dt_utc = dt.astimezone(UTC) # Convert to UTC
print(dt_utc.strftime('%a, %b %d %Y %I:%M:%S %p'))
# Tue, Sep 26 2017 03:00:00 PM
我注意到的一件事是,据我所知,您提供的日期代表UTC的3PM,而不是9PM(如您的示例所示)。这是您应该使用.astimezone(UTC)
而不是其他方法的一个原因。
如果要包含时区偏移量信息,还可以在%z
对象的未转换版本上使用datetime
参数。
print(dt.strftime('%a, %b %d %Y %I:%M:%S%z %p'))
# Tue, Sep 26 2017 06:00:00+0300 PM
即使您将其保留为UTC,此%z
参数也可能有用,因为您至少可以清楚地知道用户看到的日期是UTC日期。
仅限Python 3.2+:
鉴于您知道输入字符串的确切格式,在Python 3.2+中,您可以在不拉入dateutil
的情况下实现同样的目标,并且几乎肯定会更快(可能是也可能不是关心你)。在你的情况下,这里是如何重写代码,使它只适用于标准库:
from datetime import datetime, timezone
UTC = timezone.utc
dt_str = '2017-09-26T18:00:00+0300'
dt = datetime.strptime(dt_str, '%Y-%m-%dT%H:%M:%S%z')
dt_utc = dt.astimezone(UTC)
print(dt_utc.strftime('%a, %b %d %Y %I:%M:%S %p'))
# Tue, Sep 26 2017 03:00:00 PM
print(dt.strftime('%a, %b %d %Y %I:%M:%S%z %p'))
# Tue, Sep 26 2017 06:00:00+0300 PM