我希望做一些看似简单的任务,但我发现它在Python 2.7中是一个糟糕的噩梦。
我有一个日期字符串,例如Sat, 13 Dec 2014 13:52:00 -0500
到Dec 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
答案 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 ......)