2016-05-11 3 views
0

У меня есть часть кода, которая в настоящее время работает без каких-либо проблем на моем локальном питоне (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 _execute\n result = yield result\n", 
     " File \"/opt/conda/lib/python3.5/site-packages/tornado/gen.py\", line 1008, in run\n value = future.result()\n", 
     " File \"/opt/conda/lib/python3.5/site-packages/tornado/concurrent.py\", line 232, in result\n raise_exc_info(self._exc_info)\n", 
     " File \"<string>\", line 3, in raise_exc_info\n", 
     " File \"/opt/conda/lib/python3.5/site-packages/tornado/gen.py\", line 1017, in run\n yielded = self.gen.send(value)\n", 
     " File \"<string>\", line 6, in _wrap_awaitable\n", 
     " File \"rtamatching.py\", line 171, in post\n self.write(await self.rta_matcher.check_matches(data))\n", 
     " File \"rtamatching.py\", line 114, in check_matches\n date_match_scores.append(date_similarity(date, user_feeds[key]['TransactionDate']))\n", 
     " File \"/opt/api/functions.py\", line 9, in date_similarity\n 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_datetime\n tt, fraction = _strptime(data_string, format)\n", 
     " File \"/opt/conda/lib/python3.5/_strptime.py\", line 337, in _strptime\n (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" 
    } 
} 

Эта ошибка значения кажется странной, поскольку, насколько я могу судить, указанный формат является правильным.

+2

может быть, вы должны попробовать dateutil.parser.parse, это может предотвратить такую ​​борьбу http://dateutil.readthedocs.io/en/stable/parser .html –

+2

, если вы используете 'date_rta = 'Wed Mar 09 21:59:50 UTC 2016« '(сменить PST с UTC), он работает, поэтому он должен быть связан с значением часового пояса. см. [выпуск] (http://bugs.python.org/issue22377) –

+0

Все это было действительно полезно! @Apero Я переписал код, используя это, и теперь он работает! было бы намного менее эффективным? –

ответ

0

Как указано M.T, возникает проблема с strptime() и часовыми поясами. Переписывание моего кода следующим образом достигается результатом я ожидал:

from dateutil.parser import parse  
... 
d1 = parse(date_ds) 
d2 = parse(date_rta) 
... 
Смежные вопросы