Подтвердить что ты не робот

Разбор ненулевых временных меток в Python

Я хочу получить datetimes из временных меток, например: 3/1/2014 9:55 с datetime.strptime или что-то подобное.

Месяц, день месяца и час не заполнены нулями, но, похоже, здесь нет директивы по форматированию , которая может анализировать этот автоматически.

Какой лучший подход для этого? Спасибо!

4b9b3361

Ответ 1

strptime способен анализировать значения без дополнений. Тот факт, что они отмечены как заполненные в таблице кодов форматирования, относится к выводу strftime. Таким образом, вы можете просто использовать

datetime.strptime(datestr, "%m/%d/%Y %H:%M")

Ответ 2

strptime Не требуется 0-заполненных значений. Пример ниже

datetime.strptime("3/1/2014 9:55", "%m/%d/%Y %H:%M")
output:   datetime.datetime(2014, 3, 1, 9, 55)

Ответ 3

Не-шаблонным способом является модуль dateutil.parse, он позволяет анализировать общие форматы дат, даже если вы не знаете, что он использует в настоящее время
Пример:

>>> import dateutil.parser
>>> 
>>> utc_time     = '2014-08-13T00:00:00'
>>> verbose_time = '13-Aug-2014'
>>> some_locale  = '3/1/2014 9:55'
>>> dateutil.parser.parse(utc_time)
datetime.datetime(2014, 8, 13, 0, 0)
>>> dateutil.parser.parse(verbose_time)
datetime.datetime(2014, 8, 13, 0, 0)
>>> dateutil.parser.parse(some_locale)
datetime.datetime(2014, 3, 1, 9, 55)

Ответ 4

На всякий случай этот ответ помогает кому-то другому - я пришел сюда, думая, что у меня возникла проблема с нулевым заполнением, но на самом деле это было связано с 12:00 и 00:00 и форматом %I.

Форматтера %I предназначен для соответствия часам 12 часов, опционально с нулевым запасом. Но в зависимости от источника данных вы можете получить данные, в которых говорится, что полночь или полдень фактически равны нулю, например:

>>> datetime.strptime('2015/01/01 0:12am', "%Y/%m/%d %I:%M%p")
ValueError: time data '2015/01/01 0:12am' does not match format '%Y/%m/%d %I:%M'

То, что действительно нуждалось strptime, было 12, а не ноль:

>>> datetime.strptime('2015/01/01 12:12am', "%Y/%m/%d %I:%M%p")
datetime.datetime(2015, 1, 1, 0, 12)

Но мы не всегда контролируем наши источники данных! Мое решение для этого случая края состояло в том, чтобы поймать исключение, попробуйте разобрать его с помощью %H, с быстрой проверкой, что мы находимся в граничном случае, о котором думаем, что мы находимся.

def get_datetime(string):
    try:
        timestamp = datetime.strptime(string, "%m/%d/%Y %I:%M%p")
    except ValueError:
        # someone used zero for midnight?
        timestamp = datetime.strptime(string, "%m/%d/%Y %H:%M%p")
        assert string.lower().endswith('am')
        assert timestamp.hour == 0
    return timestamp

Ответ 5

Вы можете увидеть документ strftime здесь, но на самом деле они не все хорошо работают на всех платформах, например %-d,%-m не работают на win7 с помощью python 2.7, так что вы можете выполнить это как это

>>> date_str = '{d.year}-{d.month}-{d.day}'.format(d=datetime.datetime.now())  
>>> print(date_str)
2016-5-23