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

Python 2.7 Python 2.7中的日期解析和格式化,python-2.7,datetime,Python 2.7,Datetime,我希望做一件看似简单的事情,但我发现在Python2.7中这是一场可怕的噩梦 我有一个日期字符串,例如Sat,2014年12月13日13:52:00-0500到2014年12月13日,美国东部时间13:52 am 你知道我如何做到这一点,最好不用做太多的编码和逻辑实现,而是使用内置功能或流行的第三方库吗 注意:我的时区不是EST 最接近我的是: import time import email.utils observationTime = email.utils.parsedate('Sat

我希望做一件看似简单的事情,但我发现在Python2.7中这是一场可怕的噩梦

我有一个日期字符串,例如
Sat,2014年12月13日13:52:00-0500
2014年12月13日,美国东部时间13:52 am

你知道我如何做到这一点,最好不用做太多的编码和逻辑实现,而是使用内置功能或流行的第三方库吗

注意:我的时区不是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
您可以使用将日期字符串解析为时区感知的日期时间:

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,需要将 时区识别日期时间到
“美国/东部”
时区。这可以通过使用

这是办不到的 自动,因为还有其他时区,如
“美国/波哥大”
,具有相同的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是下午,不是上午…

这实际上是两个问题:(1)将字符串解析为datetime+时区,以及(2)将datetime+时区格式化为字符串。嗯,我不喜欢-0500不足以自动计算出时区的想法,但它是这样的。。。我想这至少在目前可以完成任务,所以我不得不接受你的回答。非常感谢您花时间提供解决方案。