Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2011 16:08:40

rombr
От:
Зарегистрирован: 2011-01-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Часовой пояс в формате даты

Есть такой простой до неприличия код:

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'
Документация говорит:
%z - UTC offset in the form +HHMM or -HHMM (empty string if the the object is naive).

Что я делаю не так?



Офлайн

#2 Ноя. 25, 2011 08:19:34

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Часовой пояс в формате даты

Если посмотреть исходник _strptime.py, то там нет обработки %z - зону задать можно только через %Z.



Офлайн

#3 Ноя. 25, 2011 08:58:29

rombr
От:
Зарегистрирован: 2011-01-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Часовой пояс в формате даты

Мда, а в документации не указали.



Офлайн

#4 Ноя. 25, 2011 20:27:38

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Часовой пояс в формате даты

А погуглить?
Читайте здесь: 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)

Офлайн

#5 Ноя. 23, 2015 14:13:28

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Часовой пояс в формате даты

Вроде как по месту…
Есть БД в которой в силу тех или иных причин записывается дата в разных форматах.
В итоге по выборке из одной и той же таблицы имеем два вида дат:

a = ‘2015-11-19 21:00:00+02’
b = ‘2015-11-17 17:00:00’

Все прекрасно когда их нужно просто вывести. Однако есть ряд задач когда даты нужно сравнить.
Вот вопрос в какой вид и чем их приводить что бы сравнивать?
К примеру нужно выбрать все совпадения в словаре - в которых значение даты B <= значению даты А или наоборот - не суть.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Ноя. 23, 2015 22:38:10

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Часовой пояс в формате даты

ZerG
логичный ответ если это строка содержит дату и время,то переводить в datetime объект, он поддерживает операции сравнения. В случае когда формат заранее неизвестен применяется общий принцип - иметь список шаблонов форматов, начиная от самого конкретного заканчивая самым общим, и в отдельной функции в цикле пробовать конвертировать, до первого удачного случая.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Ноя. 24, 2015 07:56:16

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Часовой пояс в формате даты

Мысль сия посещала …
Хотите верьте хотите нет - но проще таки оказалось изменить структуру таблицы в базе 1 раз….



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version