Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何正确转换特定时区中的字符串日期?_Python_Datetime_Python Datetime_Python Dateutil - Fatal编程技术网

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)