2011-11-28 13 views
6

tôi sử dụng một tuyên bố như hình dưới đây để tạo ra một đối tượng datetime từ một chuỗi:'datetime.strftime` và' datetime.strptime` phiên dịch% Y khác nhau

t = datetime.strptime("0023-10-10", "%Y-%m-%d")

Sau đó, ở đâu đó trong sử dụng mã của tôi đối tượng t và gọi phương thức strftime với chuỗi định dạng tương tự:

t.strftime("%Y-%m-%d")

Điều này gây ra một ValueError: year=23 is before 1900; the datetime strftime() methods require year >= 1900.

Dường như việc xác thực đầu vào% Y là khác nhau trong hai phương pháp tương tự này. Vì vậy, tôi phải làm những điều sau đây để chắc chắn rằng tôi không chấp nhận một số năm xấu như 23:

try: 
    format = "%Y-%m-%d" 
    t = datetime.strptime("0023-10-10", format) 
    t.strftime(format) 
except ValueError: 
    ... 

Tôi tự hỏi nếu có một cách tốt hơn để làm xác nhận này.

Trả lời

4

Tôi thích ý tưởng của bạn về việc sử dụng số try..except để xác thực thông tin đầu vào, vì trong một số phiên bản Python trong tương lai, năm < 1000 có thể được chấp nhận.

This comment trong mã đề xuất hạn chế này được giới hạn trong việc triển khai strftime hiện tại của Python.


Trong Python 2.7, các ngoại lệ xảy ra cho years < 1900, nhưng bằng Python 3.2, các ngoại lệ xảy ra cho years < 1000:

import datetime as dt 
format = "%Y-%m-%d" 
t = dt.datetime.strptime("0023-10-10", format) 
try: 
    t.strftime(format) 
except ValueError as err: 
    print(err) 

in

year=23 is before 1000; the datetime strftime() methods require year >= 1000 
+0

Tôi vẫn không hiểu tại sao hạn chế này không được áp dụng cho 'strptime'. – satoru

+1

'datetime.strftime' cuối cùng gọi một số hàm C,' strftime.' Việc triển khai thực hiện được giới hạn trong năm> = 1900 hoặc 1000 phụ thuộc vào phiên bản của Python. strptime được thực hiện bằng Python, và không có cùng hạn chế. Xem [yêu cầu tính năng] này (http://bugs.python.org/issue1777412). – unutbu

2

Bạn chỉ cần kiểm tra if t.year < 1900 và nếu nó trả về lỗi. Không cần phải cố ý gây ra một ngoại lệ.

+0

Thx để trả lời. Nhân tiện, bạn có biết tại sao những phương thức này hoạt động khác nhau không? – satoru

Các vấn đề liên quan