虽然我在"%a %b %d %H:%M:%S %Z %Y"
中将time.strptime()
作为格式字符串传递,但它在'%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'
答案 0 :(得分:1)
%Z的值来自附加到tzinfo
对象的datetime
对象,但是如果你没有datetime
个对象(因此也没有tzinfo
) '使用strptime()
代替strftime()
。实际上,标准Python库附带的唯一tzinfo
对象是固定偏移timezone
对象,然后仅在Python 3中。标准库没有这些的规范列表,除了标准UTC值;相反,您需要根据需要创建它们,或者使用pytz代替。因此, Python标准库没有将任意三字母代码转换为时区的机制。它应该能够处理'UTC'
,某些同义词,以及您系统区域设置返回的当地时间,但这就是它。
(提示:对于大多数人来说,pytz是正确使用的东西。)
无论如何,三个字母的代码都是not globally unique,所以没有“正确”的方式去做你要求的事情。您需要具有类似Olson database标识符的内容(例如America/New_York
与东部标准/夏令时大致同义。)
答案 1 :(得分:1)
Actualy我只是犯了一个非常愚蠢的错误
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.strptime(),格式为
对不起造成的不便