#django #python-dateutil
#django #python-dateutil
Вопрос:
Я пытаюсь использовать Django dateutil.pareser.parse() для изменения даты ‘2016:09:24 17:08:45’ кому: «2016-09-24 17:08:45». Но когда я использую следующий код:
the_timestamp = self.request.query_params.get('timestamp',0) # = '2016:09:24 17:08:45'
the_parsed_timestamp = dateutil.parser.parse(the_timestamp)
Я получаю результат the_parsed_timestamp = ‘2016-10-16 17:08:45’. 2016-10-16 это сегодняшняя дата.
Почему dateutil.parser.parse заменяет дату сегодняшней датой (и оставляет только временную часть)?
Комментарии:
1. Знаете ли вы, что это всегда в формате «%Y:%m:% d% H:%M: S»? Если это так, не используйте
dateutil.parser
, используйтеdatetime.strptime
. Тем не менее, это похоже на ошибку, вы должны сообщить об этом в dateutil’s issue tracker — даже если этот формат не поддерживается, он не должен молча терпеть неудачу.2. Кстати, я подозреваю, что происходит то, что он интерпретирует
2016:09:24
как%H:%M:%S
, и способdateutil
работает, если вы дадите ему 2 триплета HMS подряд, второй перезапишет первый. Если вы передадите2016:09:24
синтаксический анализатор сам по себе, он выдаст ошибку, потому что «2016» — это слишком большой час, поэтому вы фактически просто передаете это «17:08:45»3. О, хорошо, значит, parse недостаточно умен для этого формата? Моя проблема в том, что я не уверен, в каком формате будет отображаться дата-время, поэтому я надеялся, что смогу использовать умную утилиту, такую как dateutil parse, чтобы разобраться в этом для меня. Есть ли предупреждение для dateutil?
4. @p Я пробовал strptime, как вы предлагаете, но получаю ошибку: ошибка значения: данные времени ‘2016:09:24 17:09:18’ не соответствует формату ‘%Y:%m:%d% H:%M: S’ Ах, хорошо, теперь я вижу опечатку 🙂
5. Я думаю, это просто ошибка в dateutil. Вы можете попробовать
dateparser
, но я не очень хорошо знаком с его общими возможностями. Очень сложно правильно проанализировать все, что когда-либо можно было бы считать датой, поэтому нестандартные форматы обычно не поддерживаются такого рода вещами, и в конечном итоге вам просто нужен специальный случай.
Ответ №1:
У вас неправильный формат даты. Это должно быть:
2016-09-24
не
2016:09:24
Комментарии:
1. Да, я знаю. Поступающая дата находится в формате 2016:09:24 Я пытаюсь использовать функцию анализа dateutil, чтобы преобразовать ее в правильный формат. Кажется, все в порядке, за исключением изменения даты!
2. @BillNoble Соответствует ли формат? Может быть, вы можете просто использовать
datetime.datetime.strptime('2016:09:24 17:08:45', '%Y:%m:%d %H:%M:%S')
вместо этого.3. Это работает для данного конкретного случая, но формат даты не соответствует