Время и время синтаксического анализа с часами 1-24 вместо 0-23

У меня есть источник данных, который содержит datetime, который я читаю на Python. Программа всегда умирает на 24-й час, так как python содержит даты 0-23, а не 1-24.

Учитывая, что я получаю строку типа «2012/15/01 24», как лучше всего это сделать?

Я мог бы использовать регулярные выражения, чтобы вытащить преобразование даты в дату, а затем снова использовать регулярные выражения, чтобы получить час, преобразовать в int, вычесть час, а затем добавить часы в дату и время, но это похоже на боль.

Есть ли лучший способ или более общий подход к этому?

3 Solutions collect form web for “Время и время синтаксического анализа с часами 1-24 вместо 0-23”

Уверен, что ваш источник данных на самом деле имеет часы от 0 до 24 включительно. Проверь это. Это «глупая идея» различать полуночью «в начале дня» и полночь «в конце дня». Если так, то, как сказал @Amadan, 24 на самом деле означает 00:00 на следующий день.

Как с этим бороться, зависит от точной (исчерпывающей) информации о том, как данные представлены в вашем источнике данных. Одного примера недостаточно, чтобы прибить это. Если это все, что нужно, то проверка thestring.endswith(" 24") достаточно, чтобы поймать этот случай. Когда у вас есть такой случай, выбросьте 24, timedelta(days=1) в datetime , а затем добавьте timedelta(days=1) .

Или, если вы абсолютно уверены, что часы варьируются от 1 до 24 включительно, вам придется вычесть один из часов. Но я никогда не видел систему, которая работает именно так.

Не мое, но это сработает.

 try: time = datetime.datetime.strptime(time, " %H:%M:%S.%f") except ValueError: time = time.replace(' 24', ' 23') time = datetime.datetime.strptime(time, " %H:%M:%S.%f") time += datetime.timedelta(hours=1) 

Я бы, наверное, просто пошел на что-то простое:

 from datetime import datetime import re s = '2012/15/01 24' y, d, m, h = map(int, re.findall('\d+', s)) dt = datetime(y, m, d, h - 1) # 2012-01-15 23:00:00 
  • Python - использование кавычек внутри кавычек
  • Цифровой корень без петель Python
  • ImportError: не может импортировать имя Counter
  • Что случилось с этой совокупной суммой?
  • Как получить имя модуля определения класса объекта, а не имя модуля для объекта Instantiation?
  • python dict.update против индекса, чтобы добавить одну пару ключ / значение
  • Не удается разрешить WindowsError: Система не может найти указанный файл
  • Является ли PyBluez живым?
  • TypeError: объект 'module' не вызываемый метод класса python
  • Выполнение снимков экрана определенного размера
  • Чтение / запись списка вложенных словарей в / из файла CSV (Python)
  • Python - лучший язык программирования в мире.