Python:如何正确转换特定时区中的字符串日期?
我有一个人输入的Python:如何正确转换特定时区中的字符串日期?,python,datetime,python-datetime,python-dateutil,Python,Datetime,Python Datetime,Python Dateutil,我有一个人输入的YYYY-MM-DD HH:MM:SS格式,我知道应该是洛杉矶当地时间。在Python中,如何将其转换为明确且正确的datetime.datetime对象?我知道,在脱离DST的秋季过渡期间,输入是不明确的;我很赞成在这一小时内选择哪一个日期,只要它是确定的 以下是我的尝试,我惊讶地发现它不起作用: >>> import pytz >>> from dateutil import parser as date_parser >>&g
YYYY-MM-DD HH:MM:SS
格式,我知道应该是洛杉矶当地时间。在Python中,如何将其转换为明确且正确的datetime.datetime
对象?我知道,在脱离DST的秋季过渡期间,输入是不明确的;我很赞成在这一小时内选择哪一个日期,只要它是确定的
以下是我的尝试,我惊讶地发现它不起作用:
>>> import pytz
>>> from dateutil import parser as date_parser
>>> PACIFIC = pytz.timezone('US/Pacific')
>>> result = date_parser.parse('2016-08-01 00:00:00 FOO', tzinfos={'FOO': PACIFIC})
>>> result.utcoffset()
datetime.timedelta(-1, 57600)
>>> str(result)
'2016-08-01 00:00:00-08:00'
尽管我要求了美国/太平洋地区,而且这是一个夏季日期,但我得到的是UTC-8而不是UTC-7。我发现这可能会有所帮助。把它切碎一点,我得到了你要找的-0700。我必须承认我不理解这个模块,所以我不能指出在哪里可以快速修复代码(而且我在命令行上不太使用python),但是下面的方法很有效
import datetime
import pytz
def report(time):
mytz = pytz.timezone('US/Pacific')
dtformat = "%Y-%m-%d %H:%M"
t = datetime.datetime.strptime(time, dtformat).replace(tzinfo=pytz.utc)
print ("*****")
print (t)
print (mytz.normalize(t))
report("2011-08-01 00:00")
所以,希望这有帮助 你可以用它
这里的问题是
pytz
时区不能像那样容易地连接。您需要对返回的datetime.datetime
对象使用PACIFIC.localize()
。如果所有日期都使用一个已知的时区,那么不要麻烦使用tzinfos
。哦,另外,如果您知道日期和时区的格式,不要使用dateutil.parser
,它效率低下,并且不强制执行格式(因此格式中的错误可能仍然会生成日期,但不正确)。使用datetime.strtime
谢谢@Paul;你介意把它变成一个有效的例子作为答案吗?我可以,但我现在不在国内,所以可能需要几天时间。如果有人想接受这个想法并付诸实施,我不会生气。请参阅现有的工作示例。这很有帮助,但给出了错误的答案。上次打印语句的结果是2011-07-31 17:00:00-07:00
,但我正在查找2011-08-01 00:00:00-07:00
。
import dateparser
>>> dateparser.parse('2016-08-01 00:00:00', settings={'TIMEZONE': 'US/Pacific', 'TO_TIMEZONE': 'UTC'})
datetime.datetime(2016, 8, 1, 7, 0)