Проверка, если строка даты в формате UTC - PullRequest
2 голосов
/ 15 июля 2011

У меня есть строка с датой типа "2011-11-06 14: 00: 00 + 00: 00". Есть ли способ проверить это в формате UTC или нет? Я попытался преобразовать вышеуказанную строку в объект datetime, используя utc = datetime.strptime('2011-11-06 14:00:00+00:00','%Y-%m-%d %H:%M%S+%z), чтобы я мог сравнить его с pytz.utc, но я получаю 'ValueError:' z '- плохая директива в формате'% Y-% m-% d % H:% M% S +% г '* * тысяча два

Как проверить, находится ли строка даты в UTC? Некоторый пример был бы очень признателен.

Спасибо

Ответы [ 3 ]

5 голосов
/ 15 июля 2011

Простое регулярное выражение будет делать:

>>> import re
>>> RE = re.compile(r'^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$')
>>> bool(RE.search('2011-11-06 14:00:00+00:00'))
True
2 голосов
/ 15 июля 2011

Под «в формате UTC» вы на самом деле имеете в виду ISO-8601? . Это довольно общий вопрос .

2 голосов
/ 15 июля 2011

Проблема с вашей строкой форматирования заключается в том, что strptime просто передает задание синтаксического анализа строк времени на c's strptime, и различные разновидности c принимают разные директивы. В вашем случае (и, похоже, в моем) директива %z не принята.

На страницах документации есть некоторая двусмысленность по этому поводу. Документы datetime.datetime.strptime указывают на спецификацию формата для time.strptime, которая не содержит строчной директивы %z, и указывают, что

Дополнительные директивы могут поддерживаться на определенных платформах, но только те, которые перечислены здесь, имеют значение, стандартизированное ANSI C.

Но тогда он также указывает здесь , который содержит строчную букву %z, но повторяет, что

Полный набор поддерживаемых кодов формата варьируется в зависимости от платформы, потому что Python вызывает функцию strftime () библиотеки С, и изменения платформы распространены.

Существует также сообщение об ошибке об этой проблеме.

...