Python time.strtime()不符合指定的格式

Python time.strtime()不符合指定的格式,python,time,Python,Time,虽然我在time.strtime()中以格式字符串的形式传递了%a%b%d%H:%M:%S%Z%Y“,但它在%a%b%d%H:%M:%S%Y'上运行,因此导致错误。知道是什么引起的吗 同样的东西在python控制台中运行得很好,但在实际代码中却没有 Exception in thread Thread-7: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 801, in _

虽然我在
time.strtime()
中以格式字符串的形式传递了
%a%b%d%H:%M:%S%Z%Y“
,但它在
%a%b%d%H:%M:%S%Y'
上运行,因此导致错误。知道是什么引起的吗

同样的东西在python控制台中运行得很好,但在实际代码中却没有

    Exception in thread Thread-7:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "proxy.py", line 137, in listenThread
    response = self.fetchRequest(raw_request, request)
  File "proxy.py", line 114, in fetchRequest
    if request['type'] == "GET" and self.is_cachable(request, response_headers):
  File "proxy.py", line 100, in is_cachable
    requestTime = time.mktime(time.strptime(self.request_log[request['url']][len(self.request_log[request['url']])-3]), "%a %b  %d %H:%M:%S %Z %Y")
  File "/usr/lib/python2.7/_strptime.py", line 478, in _strptime_time
    return _strptime(data_string, format)[0]
  File "/usr/lib/python2.7/_strptime.py", line 332, in _strptime
    (data_string, format))
ValueError: time data 'Mon Apr  10 22:52:38 IST 2017' does not match format '%a %b %d %H:%M:%S %Y'

%Z的值来自附加到
datetime
对象的
tzinfo
对象,但是如果使用
strftime()
而不是
strftime()
,则没有
datetime
对象(因此也没有
tzinfo
)。实际上,标准Python库附带的唯一
tzinfo
对象是固定偏移量对象,然后仅在Python 3中。除了标准UTC值外,标准库没有这些的规范列表;相反,您需要根据需要创建它们,或者使用它们。因此,Python标准库没有将任意三字母代码转换为时区的机制。它应该能够处理
“UTC”
、一些同义词,以及系统区域设置返回的本地时间,但仅此而已

(提示:对于大多数人来说,pytz是正确的选择。)


不管怎样,三个字母的代码是正确的,所以没有“正确”的方法来满足你的要求。您需要有类似标识符的东西(例如,
America/New_York
大致等同于东部标准时间/昼时)。

%Z的值来自附加到
datetime
对象的
tzinfo
对象,但没有
datetime
对象(因此也没有
tzinfo
)如果您使用的是
strtime()
而不是
strftime()
。实际上,标准Python库附带的唯一
tzinfo
对象是固定偏移量对象,然后仅在Python 3中。除了标准UTC值外,标准库没有这些的规范列表;相反,您需要根据需要创建它们,或者使用它们。因此,Python标准库没有将任意三字母代码转换为时区的机制。它应该能够处理
“UTC”
、一些同义词,以及系统区域设置返回的本地时间,但仅此而已

(提示:对于大多数人来说,pytz是正确的选择。)


不管怎样,三个字母的代码是正确的,所以没有“正确”的方法来满足你的要求。你需要有一个类似于标识符的东西(例如,
美国/纽约
大致相当于东部标准时间/夏令时)。

实际上我犯了一个非常愚蠢的错误

requestTime = time.mktime(time.strptime(self.request_log[request['url']][len(self.request_log[request['url']])-3]), "%a %b  %d %H:%M:%S %Z %Y")
上面括号的顺序不对,应该是这样的

requestTime = time.mktime(time.strptime(self.request_log[request['url']][len(self.request_log[request['url']])-3], "%a %b  %d %H:%M:%S %Z %Y"))
实际上,我只是将时间字符串传递给time.strtime(),保留了格式

对不起,我刚才犯了一个愚蠢的错误

requestTime = time.mktime(time.strptime(self.request_log[request['url']][len(self.request_log[request['url']])-3]), "%a %b  %d %H:%M:%S %Z %Y")
上面括号的顺序不对,应该是这样的

requestTime = time.mktime(time.strptime(self.request_log[request['url']][len(self.request_log[request['url']])-3], "%a %b  %d %H:%M:%S %Z %Y"))
实际上,我只是将时间字符串传递给time.strtime(),保留了格式

很抱歉造成不一致

请显示导致问题的实际代码。您在“Apr”和“10”之间有一个额外的空格。您运行的代码必须与您认为的不同。Python不会随机使用其他硬编码字符串。错误显示它使用的格式为:“%a%b%d%H:%M:%S%Y”,尽管您传递的格式正确。请分享您的代码和样本数据。谢谢。可能是
%Z
没有实现。请看这个:和这个:和这个:请显示导致问题的实际代码。您在“Apr”和“10”之间有一个额外的空格。您运行的代码必须与您认为的不同。Python不会随机使用其他硬编码字符串。错误显示它使用的格式为:“%a%b%d%H:%M:%S%Y”,尽管您传递的格式正确。请分享您的代码和样本数据。谢谢。可能是
%Z
没有实现。请参见:和这个:和这个:即使对于
%Z
,回溯也应该显示传入的格式。这里不是这样。我能得出的唯一结论是服务器正在运行过时的字节码。源代码较新。@MartijnPieters:如果OP的源代码与OP的字节码匹配就好了,但不幸的是,这并不能解决OP的实际问题,即他们试图做一些不可能的事情。当然,但这就是错误所在。实际使用的格式不包含
%Z
@MartijnPieters:Python应该自动计算.pyc文件。我对你的解释有点怀疑。我想象
%Z
在标准库的某个地方被悄悄地删除了;UTC、GMT和BST(后两个在
time.tzname
中列出)都对我有效,但实际上没有返回tz信息。这是因为glibc正处于如此重要的时刻。即使对于
%Z
,回溯也应该显示传入的格式。这里不是这样。我能得出的唯一结论是服务器正在运行过时的字节码。源代码较新。@MartijnPieters:如果OP的源代码与OP的字节码匹配就好了,但不幸的是,这并不能解决OP的实际问题,即他们试图做一些不可能的事情。当然,但这就是错误所在。实际使用的格式不包含
%Z
@MartijnPieters:Python应该自动计算.pyc文件。我对你的解释有点怀疑。我想象
%Z
在标准库的某个地方被悄悄地删除了;UTC、GMT和BST(后两个在
time.tzname
中列出)都对我有效,但实际上没有返回tz信息。那是因为glibc在这个重要的时刻下赌注。啊,事实上,这是默认格式。啊,事实上,这是默认格式