Пытаюсь вставить значение даты и времени в модель django, но получаю ошибку недопустимого формата

#python #django #datetime

#python #django #дата и время

Вопрос:

Я пытаюсь сохранить свои значения даты и времени из datetimepicker в модель Django. Я получаю ошибку формата времени.

Это ошибка: временные данные ‘2020-09-17T10:05’ не соответствуют формату «гггг-мм-дд’Т’Ч: ММ»

Мой код:

 name = request.POST["name"]
date1 = request.POST["start"]
startdate = datetime.strptime(date1, "yyyy-mm-dd'T'HH:MM")
start = startdate.isoformat()
date2 = request.POST["end"]
enddate = datetime.strptime(date2, "yyyy-mm-dd'T'HH:MM")
end = enddate.isoformat()
e = Events(name=name, start=start, end=end)
e.save();
  

Обновить:

Я не уверен, что это e.save(), но вот ошибка, которую я получаю. Нигде не говорится, что ошибка находится в форме. введите описание изображения здесь

Обновление (решение):

 name = request.POST["name"]
date1 = request.POST["start"]
startdate = datetime.strptime(date1, "%Y-%m-%dT%H:%M")
start = startdate.isoformat()
date2 = request.POST["end"]
   if not date2:
      end = None
   else:
      enddate = datetime.strptime(date2, "%Y-%m-%dT%H:%M")
      end = enddate.isoformat()
 e = Events(name=name, start=start, end=end)
 e.save();
  

Ответ №1:

Похоже, вы полностью изобрели токены, которые вы использовали в строке форматирования в strptime функции. Они не имеют никакого отношения к тому, для чего предназначена эта функция. Я не уверен, откуда у вас появилась идея для них — возможно, вы перепутали ее с функцией из другого языка программирования?

Правильные токены, соответствующие годам, месяцам и т. Д., Четко перечислены в официальной документации по адресу: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes . Эта ссылка также содержит полезные примеры: https://www.programiz.com/python-programming/datetime/strptime

Читая из них, для вашего случая правильная строка должна быть:

 "%Y-%m-%dT%H:%M"
  

Таким образом, код для анализа даты начала, например, должен быть:

 startdate = datetime.strptime(date1, "%Y-%m-%dT%H:%M")
  

Демонстрация: https://onlinegdb.com/HyZH8r8Bw

Комментарии:

1. Спасибо за ваш ответ. Я уже пробовал этот метод раньше. перепроверил его, но он по-прежнему выдает ошибку в формате времени. Ошибка: данные о времени » не соответствуют формату ‘%Y-%m-%dT%H:%M’

2. Это мои данные date1: 2020-09-17T10:05

3. Я протестировал его с помощью действительно простого скрипта, он работает без ошибок: from datetime import datetime date1 = '2020-09-17T10:05'; startdate = datetime.strptime(date1, "%Y-%m-%dT%H:%M")

4. Я использую формат 12 часов, может ли это быть проблемой? Я попробовал %I вместо%H, но все та же ошибка

5. Где вы используете формат 12 часов? Ваша строка даты — это строка ISO8601. Оно должно быть в формате 24 часа. Ваша строка не содержит ничего, указывающего, является ли время AM или PM, поэтому оно всегда будет интерпретироваться как 24 часа