Время и время синтаксического анализа с часами 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 - Может (или должен) изменить os.path.sep?
  • Начать бэкэнд с помощью async urlfetch в Google App Engine
  • Как проверить, работает ли redis до того, как я запустил флягу (и запустил ее, если это не так)?
  • Как получить широту и долготу с помощью python
  • Разработка модуля Python
  • максимум 2 номера
  • Простой пример счетчика с использованием mapreduce в Google App Engine
  • Python - лучший язык программирования в мире.