Thư viện Python dateutil
được thiết kế cho việc này [và hơn thế nữa]. Nó sẽ tự động chuyển đổi điều này thành đối tượng datetime
cho bạn và nâng ValueError
nếu không.
Ví dụ:
>>> from dateutil.parser import parse
>>> parse["2003-09-25"]
datetime.datetime[2003, 9, 25, 0, 0]
Điều này sẽ tăng ValueError
nếu ngày không được định dạng chính xác:
>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
cũng cực kỳ hữu ích nếu bạn bắt đầu cần phân tích các định dạng khác trong tương lai, vì nó có thể xử lý hầu hết các định dạng đã biết một cách thông minh và cho phép bạn sửa đổi đặc điểm kỹ thuật của mình: dateutil
Các ví dụ phân tích cú pháp.
Nó cũng xử lý thời gian nếu bạn cần điều đó.
Cập nhật dựa trên nhận xét:
1 cũng chấp nhận đối số từ khóa >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
2 kiểm soát xem ngày hoặc tháng dự kiến sẽ đến trước nếu ngày không rõ ràng. Điều này mặc định là sai. Ví dụ.: >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
1 also accepts the keyword argument >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
2 which controls whether the day or month is expected to come first if a date is ambiguous. This defaults to False. E.g.>>> 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
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Đọc
Examples:
Bàn luận test_str = ’04-01-1997′, format = “%d-%m-%Y”
Đưa ra định dạng ngày và ngày chuỗi, nhiệm vụ là viết chương trình Python để kiểm tra xem ngày có hợp lệ không và khớp với định dạng. True
Đầu vào: test_str = xông04 -01-1997 ′, định dạng = Hồi%d-%m-%y Formats match with date.
Đầu ra: Đúng test_str = ’04-14-1997′, format = “%d-%m-%Y”
Giải thích: Định dạng phù hợp với ngày. False
Đầu vào: test_str = xông04 -14-1997 ′, định dạng = Hồi%d-%m-%y Month cannot be 14.
Đầu ra: Sai
Giải thích: Tháng không thể là 14.
Python3
Phương pháp số 1: Sử dụng Strptime []
Trong đó, hàm, Strptime thường được sử dụng để chuyển đổi ngày chuỗi sang đối tượng DateTime, được sử dụng như khi nó không khớp với định dạng hoặc ngày, tăng giá trịerror và do đó có thể được sử dụng để tính toán hiệu lực.
>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
3 >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
4>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
5 datetime
>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
7>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
9>>> 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
0>>> 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
1>>> 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
2 >>> 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
3 >>> 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
4>>> 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
5The original string is : 04-01-1997 Does date match format? : True2
The original string is : 04-01-1997 Does date match format? : True3
>>> 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
6 >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 >>> 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
8>>> 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
9>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 The original string is : 04-01-1997 Does date match format? : True1
The original string is : 04-01-1997 Does date match format? : True4
>>> 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
9>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 The original string is : 04-01-1997 Does date match format? : True7
The original string is : 04-01-1997 Does date match format? : True8
>>> 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
6The original string is : 04-01-1997 Does date match format? : True0
The original string is : 04-01-1997 Does date match format? : True1
The original string is : 04-01-1997 Does date match format? : True2
Output:
The original string is : 04-01-1997 Does date match format? : True
The original string is : 04-01-1997
Does date match format? : True
4>>> 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
9>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 The original string is : 04-01-1997
Does date match format? : True
6
>>> 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["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
>>> 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
0>>> 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
1The original string is : 04-01-1997 Does date match format? : True9
>>> 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
3 >>> 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
4dateutil
2Python3
Phương pháp #2: Sử dụng DateUtil.Parser.Parse []
Trong đó, hàm, Strptime thường được sử dụng để chuyển đổi ngày chuỗi sang đối tượng DateTime, được sử dụng như khi nó không khớp với định dạng hoặc ngày, tăng giá trịerror và do đó có thể được sử dụng để tính toán hiệu lực.
>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
3 >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
4>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
5 datetime
>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
7>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
9>>> 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
0>>> 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
1>>> 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
2 >>> 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
3 >>> 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
4>>> 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
5The original string is : 04-01-1997 Does date match format? : True2
The original string is : 04-01-1997 Does date match format? : True3
>>> 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
6 >>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 >>> 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
8>>> 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
9>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 The original string is : 04-01-1997 Does date match format? : True1
The original string is : 04-01-1997 Does date match format? : True4
>>> 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
9>>> parse["2003-09-251"]
Traceback [most recent call last]:
File "", line 1, in
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
8 The original string is : 04-01-1997 Does date match format? : True7
The original string is : 04-01-1997 Does date match format? : True8
>>> 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
6The original string is : 04-01-1997 Does date match format? : True0
The original string is : 04-01-1997 Does date match format? : True1
The original string is : 04-01-1997 Does date match format? : True2
Output:
The original string is : 04-01-1997 Does date match format? : True