2014-02-07 5 views
0

Я пишу API, и я хотел бы принять формат ISO 8601 для даты и времени. Я хочу принять только этот формат. Я использую dateutil на данный момент, но его функция синтаксического анализа принимает все форматы, не связанные с ISO8601. У меня есть простое регулярное выражение, проверяющее формат сейчас, но фактический стандарт позволяет намного больше, чем мое регулярное выражение.Python анализирует только формат iso8601 datetime?

Есть ли простая функция/модуль, который обеспечивает способ анализа только даты или времени в формате 8601?

+3

https://pypi.python.org/pypi/iso8601 так трудно искать Это? –

+0

Он имеет раздел «где он отличается», что означает, что он позволяет использовать некоторые форматы, отличные от ISO8601. –

+1

Поиск google regex формата iso8601 привел меня к этому вопросу: http://stackoverflow.com/questions/12756159/regex-and-iso8601-formated-datetime. Один из ответов предлагает это регулярное выражение:/^ ([\ + -]? \ D {4} (?! \ D {2} \ b)) ((-?) ((0 [1-9] | 1 [ 0-2]) (\ 3 ([12] \ д | 0 [1-9] | 3 [01])) | W ([0-4] \ д | 5 [0-2]) (-? [1-7]) |? (00 [1-9] | 0 [1-9] \ д | [12] \ d {2} | 3 ([0-5] \ д | 6 [1-6]))) ([Т \ с] ((([01] \ д | 2 [0-3])? ((?) [0-5] \ г) | 24 \ :? 00) ([\. ,] \ d +:)) (\ 17 [0-5] \ d ([\] \ d +)) ([ZZ] | ([\ + -]) ([01 (?!)?.? ] \ d | 2 [0-3]):? ([0-5] \ d)?)?)?)? $/ –

ответ

0

Вы можете использовать datetime.datetime.strptime, который даст ошибку, если он не может разобрать против формата вы указываете:

from datetime import datetime 

def parse_8601(s): 
    """Parses date string if in an ISO 8601 format, else returns None.""" 
    for f in ["%Y-%m-%dT%H:%M:%S", ...]: # acceptable formats 
     try: 
      return datetime.strptime(s, f) 
     except ValueError: 
      pass 
Смежные вопросы