时间数据格式不匹配错误



我有一段代码目前在我的本地python(anaconda python 3.5.1)上运行时没有任何问题,但当我在生产中运行它时,它给了我一个奇怪的错误(我觉得环境非常相似,python版本相同)。

以下是相关的代码片段:

ds_date_format = "%Y%m%d"
rta_date_format = '%a %b %d %H:%M:%S %Z %Y'
d1 = datetime.datetime.strptime(date_ds, ds_date_format)
d2 = datetime.datetime.strptime(date_rta, rta_date_format).replace(hour=0, minute=0, second=0)

以及我得到的错误的回溯。

{
  "error": {
    "traceback": [
      "Traceback (most recent call last):n",
      "  File "/opt/conda/lib/python3.5/site-packages/tornado/web.py", line 1445, in _executen    result = yield resultn",
      "  File "/opt/conda/lib/python3.5/site-packages/tornado/gen.py", line 1008, in runn    value = future.result()n",
      "  File "/opt/conda/lib/python3.5/site-packages/tornado/concurrent.py", line 232, in resultn    raise_exc_info(self._exc_info)n",
      "  File "<string>", line 3, in raise_exc_infon",
      "  File "/opt/conda/lib/python3.5/site-packages/tornado/gen.py", line 1017, in runn    yielded = self.gen.send(value)n",
      "  File "<string>", line 6, in _wrap_awaitablen",
      "  File "rtamatching.py", line 171, in postn    self.write(await self.rta_matcher.check_matches(data))n",
      "  File "rtamatching.py", line 114, in check_matchesn    date_match_scores.append(date_similarity(date, user_feeds[key]['TransactionDate']))n",
      "  File "/opt/api/functions.py", line 9, in date_similarityn    d2 = datetime.datetime.strptime(date_rta, rta_date_format).replace(hour=0, minute=0, second=0)n",
      "  File "/opt/conda/lib/python3.5/_strptime.py", line 500, in _strptime_datetimen    tt, fraction = _strptime(data_string, format)n",
      "  File "/opt/conda/lib/python3.5/_strptime.py", line 337, in _strptimen    (data_string, format))n",
      "ValueError: time data 'Wed Mar 09 21:59:50 PST 2016' does not match format '%a %b %d %H:%M:%S %Z %Y'n"
    ],
    "code": 500,
    "message": "Internal Server Error"
  }
}

这个值错误看起来很奇怪,因为据我所知,指定的格式是正确的。

正如M.T所指出的,strptime()和时区似乎存在问题。按照以下方式重新编写代码,达到了我所期望的结果:

from dateutil.parser import parse    
...
d1 = parse(date_ds)
d2 = parse(date_rta)
...

最新更新