Python 2.7中的日期解析和格式化

时间:2014-12-13 19:20:20

标签: python-2.7 datetime

我希望做一些看似简单的任务,但我发现它在Python 2.7中是一个糟糕的噩梦。

我有一个日期字符串,例如Sat, 13 Dec 2014 13:52:00 -0500Dec 13 2014, 13:52 am EST

任何想法如何实现这一点,最好不要做太多的编码和逻辑实现,而是使用内置功能或流行的第三方库?

注意:我的时区不是EST。

我最接近的是:

import time
import email.utils

observationTime = email.utils.parsedate('Sat, 13 Dec 2014 13:52:00 -0500')
print time.strftime('%b %d %Y %H:%M %p %Z', observationTime)

但它产生了:

Dec 13 2014 13:52 PM GMT Daylight Time

1 个答案:

答案 0 :(得分:2)

您可以使用dateutil将日期字符串解析为时区感知日期时间:

import dateutil.parser as DP
observationTime = DP.parse('Sat, 13 Dec 2014 13:52:00 -0500')
# datetime.datetime(2014, 12, 13, 13, 52, tzinfo=tzoffset(None, -18000))

现在,打印时区缩写EST要求你转换 时区感知日期时间到'US/Eastern'时区。这可以使用pytz完成。

这不可能 因为还有其他时区,例如'America/Bogota',它们具有相同的utcoffset。

import pytz
eastern = pytz.timezone('US/Eastern')
observationTime = observationTime.astimezone(eastern)
print(observationTime.strftime('%b %d %Y %H:%M %p %Z'))
# Dec 13 2014 13:52 PM EST
print(observationTime.strftime('%b %d %Y %H:%M %z'))
# Dec 13 2014 13:52 -0500

bogota = pytz.timezone('America/Bogota')
observationTime = observationTime.astimezone(bogota)
print(observationTime.strftime('%b %d %Y %H:%M %p %Z'))
# Dec 13 2014 13:52 PM COT
print(observationTime.strftime('%b %d %Y %H:%M %z'))
# Dec 13 2014 13:52 -0500

(注13:52是PM,而不是AM ......)