В целом, это не очень хорошая идея, чтобы позволить пользователю вводить структурированные данные, подобные этому, где «буквально любой вход может быть предоставлен».
Но пакет 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
Спасибо за ответ, так как бы я быть в состоянии сделать это так, единственный допустимый формат для ввода является «DD/MM/YYYY» – Ynnekb55
@ Ynnekb55 увидеть, если изменить в ответ помогает – jedwards
I я понимаю, что я не очень продвинутый с программным обеспечением, так как я могу использовать этот код для проверки, скажем, DOB = input («Предоставить DOB»), при этом единственным входом будет 24/05/98 действителен или нет – Ynnekb55