2013-08-30 2 views
4

Я пишу программу для проверки частей XML-файла. Одним из моментов, которые я хотел бы подтвердить, является формат даты. Я читал на форуме об использовании time.strptime(), но примеры не совсем работали для меня и были чуть более моего опыта. У кого-нибудь есть идеи, как я могу подтвердить следующее. Это формат, дата и время должны быть.Как проверить определенный формат даты и времени с помощью Python

2/26/2009 3:00 PM 

Я уверен, что есть что-то встроенный и очень легко, но я не могу найти. Большое спасибо, если вы запустили это раньше и имеете предложения.

+0

Что значит проверить DateTime? Вы хотите убедиться, что он правильно отформатирован, фактическая дата, имеющая смысл (то есть не 13/45/20000), соответствует другим критериям? Что вы хотите делать с данными datetime после «проверки»? – wflynny

+0

Моя первая цель состояла в том, чтобы убедиться, что она была правильно отформатирована. – user2643864

ответ

18

Да, вы можете использовать datetime.strptime():

from datetime import datetime 


def validate_date(d): 
    try: 
     datetime.strptime(d, '%m/%d/%Y %I:%M %p') 
     return True 
    except ValueError: 
     return False 


print validate_date('2/26/2009 3:00 PM') # prints True 
print validate_date('2/26/2009 13:00 PM') # prints false 
print validate_date('2/26/2009') # prints False 
print validate_date("Should I use regex for validating dates in Python?") # prints False 
+0

Отличный ответ. Следуя типичному стилю [EAFP] (http://docs.python.org/2/glossary.html#term-eafp), самый простой и самый надежный способ проверить, можете ли вы FOO BAR, как правило, просто FOO его и видеть если это сработает ... – abarnert

+0

@abarnert спасибо, просить прощения, безусловно, проще! – alecxe

+0

Отлично работает. Спасибо за ответ. – user2643864

0

Вы можете использовать locale module в сочетании с time.strptime() для обеспечения дата/время в правильном порядке (месяц, день, год и т.д.). Или, вы могли бы сделать простое регулярное выражение ...

pattern = re.compile(r'\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2} (AM|PM)') ... Я не являюсь regex pro lol, вероятно, лучший образец.

Вы также можете использовать модуль datetime и создать новый объект datetime с константой локали и преобразовать числа в соответствующий тип (день, месяц, год).

Удачи вам!

3

Это, как вы это делаете:

from datetime import datetime 

    def validate(datetime_string): 
     try: 
      return datetime.strptime(datetime_string,"%m/%d/%Y %I:%M %p") 
     except ValueError: 
      return False 
+0

Отлично работает! Спасибо за помощь. – user2643864

1
import datetime 
parsed = datetime.datetime.strptime("2/26/2009 3:00 PM", r'%m/%d/%Y %H:%M %p') 
iso_formatted = parsed.isoformat() 
print(iso_formatted) 
+0

Спасибо за ответ. Это тоже работает. – user2643864

Смежные вопросы