날짜 입력을 문자열로 받아들이는 python 메소드가 있습니다.
메소드에 전달되는 날짜 문자열이 ffg에 있는지 확인하기 위해 유효성 검증을 추가하는 방법 체재:
'YYYY-MM-DD'
그렇지 않은 경우 메소드는 일종의 오류를 발생시켜야합니다.
날짜 입력을 문자열로 받아들이는 python 메소드가 있습니다.
메소드에 전달되는 날짜 문자열이 ffg에 있는지 확인하기 위해 유효성 검증을 추가하는 방법 체재:
'YYYY-MM-DD'
그렇지 않은 경우 메소드는 일종의 오류를 발생시켜야합니다.
답변:
>>> import datetime
>>> def validate(date_text):
try:
datetime.datetime.strptime(date_text, '%Y-%m-%d')
except ValueError:
raise ValueError("Incorrect data format, should be YYYY-MM-DD")
>>> validate('2003-12-23')
>>> validate('2003-12-32')
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
validate('2003-12-32')
File "<pyshell#18>", line 5, in validate
raise ValueError("Incorrect data format, should be YYYY-MM-DD")
ValueError: Incorrect data format, should be YYYY-MM-DD
파이썬dateutil
라이브러리 (등)이 설계되었습니다. 자동으로 이것을 datetime
당신을 위해 객체 로 변환 하고 ValueError
그것을 할 수 없다면 그것을 올릴 것입니다.
예로서:
>>> from dateutil.parser import parse
>>> parse("2003-09-25")
datetime.datetime(2003, 9, 25, 0, 0)
ValueError
날짜가 올바르게 포맷되지 않은 경우 a가 발생합니다.
>>> parse("2003-09-251")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/jacinda/envs/dod-backend-dev/lib/python2.7/site-packages/dateutil/parser.py", line 720, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/Users/jacinda/envs/dod-backend-dev/lib/python2.7/site-packages/dateutil/parser.py", line 317, in parse
ret = default.replace(**repl)
ValueError: day is out of range for month
dateutil
또한 알려진 형식을 지능적으로 처리하고 사양을 수정할 수 있으므로 향후 다른 형식을 구문 분석해야 할 경우 매우 유용합니다. dateutil
구문 분석 예제 .
또한 필요한 경우 시간대를 처리합니다.
주석 기반 업데이트 : 날짜가 모호한 경우 날짜 또는 월이 먼저 올지 여부를 제어 parse
하는 키워드 인수도 허용 dayfirst
합니다. 기본값은 False입니다. 예 :
>>> parse('11/12/2001')
>>> datetime.datetime(2001, 11, 12, 0, 0) # Nov 12
>>> parse('11/12/2001', dayfirst=True)
>>> datetime.datetime(2001, 12, 11, 0, 0) # Dec 11
parse('13/12/2001')
13 일"이지만 parse('11/12/2001')
"11 월 12 일"입니다 (첫 번째 결과는 "11 12 월"입니다).
parse
실제로 dayfirst
이를 제어 할 수 있는 키워드 인수를 사용합니다. parse('11/12/2001', dayfirst=True)
12 월 11 일을 반환합니다. dateutil의 기본값은dayfirst=False
datetutil.parser.parse()
너무 많은 시간 형식 을 허용 하는 요점이 누락되었습니다 (모호한 입력으로 다른 예를 찾을 수 있음). 당신이 할 경우 확인 하여 입력 YYYY-MM-DD 형식으로되어 있음을 다음 parse()
함수가 잘못된 도구입니다.
.parse()
외에도 형식 문자열을 반환 하는 방법이 datetime
있습니까?
전체 유효성 검사 기능은 다음과 같아야한다고 생각합니다.
from datetime import datetime
def validate(date_text):
try:
if date_text != datetime.strptime(date_text, "%Y-%m-%d").strftime('%Y-%m-%d'):
raise ValueError
return True
except ValueError:
return False
그냥 실행
datetime.strptime(date_text, "%Y-%m-%d")
strptime 메소드는 월과 일이 0으로 채워진 10 진수인지 확인하지 않으므로 충분하지 않습니다. 예를 들어
datetime.strptime("2016-5-3", '%Y-%m-%d')
오류없이 실행됩니다.
datetime.strptime(date_text, "%Y-%m-%d")
않습니까?
from datetime import datetime
datetime.strptime(date_string, "%Y-%m-%d")
..이 제기는 ValueError
호환되지 않는 포맷을 수신하는 경우.
.. 날짜 및 시간을 많이 처리하는 경우 (유닉스 타임 스탬프 플로트와 달리 datetime 객체의 관점에서) pytz 모듈을 살펴보고 저장 / db의 경우 모든 것을 UTC로 저장하는 것이 좋습니다 .