строка в datetime с долями секунды, в Google App Engine

Мне нужно преобразовать строку в объект datetime вместе с дробным секунд. Я сталкиваюсь с различными проблемами.

Обычно я делал бы:

>>> datetime.datetime.strptime(val, "%Y-%m-%dT%H:%M:%S.%f")

Но ошибки и старые документы показали мне, что python2.5 ' s strptime не имеет% f ...

Следующее исследование показывает, что хранилище данных App Engine не любит доли секунды. После редактирования объекта хранилища данных при попытке добавить .5 к полю datetime я получил следующую ошибку:

ValueError: unconverted data remains: .5

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

кто-нибудь обходил эту проблему? Я хочу использовать нативные объекты datetime ... Я скорее не храню метки времени UNIX ...

Спасибо!


РЕДАКТИРОВАТЬ: Спасибо Джейкобу Оскарсону за подсказку .replace (...)!

иметь в виду, проверять длину nofrag перед подачей. Различные источники используют различную точность для секунд.

Вот быстрая функция для тех, кто ищет что-то подобное:

def strptime(val):
    if '.' not in val:
        return datetime.datetime.strptime(val, "%Y-%m-%dT%H:%M:%S")

    nofrag, frag = val.split(".")
    date = datetime.datetime.strptime(nofrag, "%Y-%m-%dT%H:%M:%S")

    frag = frag[:6]  # truncate to microseconds
    frag += (6 - len(frag)) * '0'  # add 0s
    return date.replace(microsecond=int(frag))
14
задан Jonathan Leffler 5 May 2012 в 01:39
поделиться

1 ответ

Синтаксический анализ

Без поддержки формата % f для datetime.datetime.strptime () вы все равно можете достаточно легко ввести его в datetime.datetime ] (случайный выбор значения для вашего val здесь) с использованием datetime.datetime.replace () ), протестирован в 2.5.5:

>>> val = '2010-08-06T10:00:14.143896'
>>> nofrag, frag = val.split('.')
>>> nofrag_dt = datetime.datetime.strptime(nofrag, "%Y-%m-%dT%H:%M:%S")
>>> dt = nofrag_dt.replace(microsecond=int(frag))
>>> dt
datetime.datetime(2010, 8, 6, 10, 0, 14, 143896)

Теперь у вас есть объект datetime.datetime .

Сохранение

Дальнейшее чтение в http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#datetime

Я не вижу упоминания о том, что дроби не поддерживаются , так что да, вероятно, это только программа просмотра хранилища данных. Документы указывают непосредственно на документацию модуля Python 2.5.2 для datetime , и он поддерживает дроби, но не директиву синтаксического анализа % f для strptime . Однако запрос дробей может оказаться более сложной задачей ..

12
ответ дан 1 December 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: