Форум сайта python.su
0
Есть такой простой до неприличия код:
print datetime.strptime('2011-11-24T16:59:29.000000+0400', '%Y-%m-%dT%H:%M:%S.%f%z')Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z'
Офлайн
17
Если посмотреть исходник _strptime.py, то там нет обработки %z - зону задать можно только через %Z.
Офлайн
0
Мда, а в документации не указали.
Офлайн
13
А погуглить?
Читайте здесь: http://bugs.python.org/issue6641
PS: Наверное правильнее будет так: http://lmgtfy.com/?q=ValueError%3A+%27z%27+is+a+bad+directive+in+format
PSS: ну и типо отмаз:
$ python3.2 -c “from datetime import datetime;print(datetime.strptime('2011-11-24T16:59:29.000000+0400', ‘%Y-%m-%dT%H:%M:%S.%f%z’))”
2011-11-24 16:59:29+04:00
Отредактировано (Ноя. 25, 2011 20:35:55)
Офлайн
61
Вроде как по месту…
Есть БД в которой в силу тех или иных причин записывается дата в разных форматах.
В итоге по выборке из одной и той же таблицы имеем два вида дат:
a = ‘2015-11-19 21:00:00+02’
b = ‘2015-11-17 17:00:00’
Все прекрасно когда их нужно просто вывести. Однако есть ряд задач когда даты нужно сравнить.
Вот вопрос в какой вид и чем их приводить что бы сравнивать?
К примеру нужно выбрать все совпадения в словаре - в которых значение даты B <= значению даты А или наоборот - не суть.
Офлайн
221
ZerG
логичный ответ если это строка содержит дату и время,то переводить в datetime объект, он поддерживает операции сравнения. В случае когда формат заранее неизвестен применяется общий принцип - иметь список шаблонов форматов, начиная от самого конкретного заканчивая самым общим, и в отдельной функции в цикле пробовать конвертировать, до первого удачного случая.
Офлайн
61
Мысль сия посещала …
Хотите верьте хотите нет - но проще таки оказалось изменить структуру таблицы в базе 1 раз….
Офлайн