time.strptime()不遵守指定的格式

时间:2017-04-10 17:34:45

标签: python time

虽然我在"%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'

2 个答案:

答案 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(),格式为
对不起造成的不便