2015-03-13 4 views
-3

Im в настоящее время выполняет программу, в которой хранятся данные пользователя, такие как их имя, фамилия и дата рождения. Я не очень опытен с передовыми функциями python, и я пробовал объявлять дату рождения как строковое значение, но это приводит к проблемам, когда буквально любой ввод может быть предоставлен, например, «24/05/98» или «24/05/1998" .Как форматировать дату в python

Как я могу сделать ввод только работой с форматом «DD/MM/YYYY»?

ответ

1

В целом, это не очень хорошая идея, чтобы позволить пользователю вводить структурированные данные, подобные этому, где «буквально любой вход может быть предоставлен».

Но пакет python-dateutil делает хорошую работу, пытаясь приспособить.

from dateutil import parser 

s1 = "24/05/98" 
s2 = "24/05/1998" 
s3 = "05/24/1998" 

dt1 = parser.parse(s1) 
dt2 = parser.parse(s2) 
dt3 = parser.parse(s3) 

print dt1   # 1998-05-24 00:00:00 
print dt2   # 1998-05-24 00:00:00 
print dt3   # 1998-05-24 00:00:00 
print dt1 == dt2 # True 
print dt1 == dt3 # True 

Очевидно, что это любезность ломается, когда он не может понять, ввод, например, в каком порядке месяц и дата в строке:

s4 = "1/2/15"  # Feb 1, 2015 in D/M/Y 
s5 = "2/1/15"  # Feb 1, 2015 in M/D/Y 

dt4 = parser.parse(s4) 
dt5 = parser.parse(s5) 

print dt4   # 2015-01-02 00:00:00 
print dt5   # 2015-02-01 00:00:00 
print dt4 == dt5 # False 

Edit: За ваш комментарий, если вы знаете формат данных, вы можете использовать strptime.

Если вход не может быть успешно проанализирован, учитывая шаблон, который вы предоставляете (в этом случае %d/%m/%Y или DD/MM/YYYY), то будет поднят ValueError.

from datetime import datetime 

s1 = "24/05/1998" 
s2 = "05/24/1998" 
s3 = "24/05/98" 

for s in [s1, s2, s3]: 
    try: 
     dt = datetime.strptime(s, "%d/%m/%Y") 
     print(dt) 
    except ValueError: 
     print("Failed to parse: %s" % s) 

Выход:

 
1998-05-24 00:00:00   # Parse successful -- dt contains the datetime object 
Failed to parse: 05/24/1998 # Parse failed 
Failed to parse: 24/05/98  # Parse failed 
+0

Спасибо за ответ, так как бы я быть в состоянии сделать это так, единственный допустимый формат для ввода является «DD/MM/YYYY» – Ynnekb55

+0

@ Ynnekb55 увидеть, если изменить в ответ помогает – jedwards

+0

I я понимаю, что я не очень продвинутый с программным обеспечением, так как я могу использовать этот код для проверки, скажем, DOB = input («Предоставить DOB»), при этом единственным входом будет 24/05/98 действителен или нет – Ynnekb55

0

Попробуйте этот код, я надеюсь, что это решит вашу проблему.

from time import strptime 

date = raw_input("Please enter a date in DD/MM/YYYY format: ") 
try: 
    parsed = strptime(date, "%d/%m/%Y") 
except ValueError as e: 
    print "Please retry: {0}".format(e) 
#Do your work...