Theo định dạng tôi được cung cấp, ngày 2014-01-02 sẽ được đại diện bởi "20140102". Đây được phân tách một cách chính xác với strptime tiêu chuẩn:Tại sao datetime.datetime.strptime của python ('201412', '% Y% m% d') không tăng giá trị ValueError?
>>> datetime.datetime.strptime("20140102", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
Trong định dạng này, "201.412" sẽ không là một ngày hợp lệ. Số docs nói rằng chỉ thị "% m" là "Tháng dưới dạng số thập phân không có đệm". Nó đưa ra các ví dụ "01, 02, ..., 12". Chỉ thị ngày "% d" cũng được cho là không có đệm.
Dựa trên điều này, tôi hy vọng rằng "201412" sẽ là đầu vào không hợp lệ với định dạng này, vì vậy sẽ tăng giá trị ValueError. Thay vào đó, nó được hiểu là 2014-01-02:
>>> datetime.datetime.strptime("201412", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
Câu hỏi đặt ra là: có cách nào để chỉ định "không có chỉ đệm không nghiêm trọng" không? Hay tôi hiểu nhầm cụm từ "không độn" trong ngữ cảnh này?
Lưu ý rằng câu hỏi không phải là về cách phân tích cú pháp các ngày theo định dạng này, nhưng về sự hiểu biết về hành vi của strptime.
này không thực sự giúp bạn, nhưng nó là phần nào liên quan (nghĩ '/ 'lĩnh vực tách) [Phân tích khác không dấu thời gian đệm trong python] (http://stackoverflow.com/ question/25279993/parsing-non-zero-độn-timestamps-in-python) – metatoaster
tôi nghĩ rằng nó phụ thuộc vào biểu thức chính quy, hàm sử dụng – kiviak
Dường như một số giải thích bổ sung trong tài liệu Python sẽ là tốt đẹp. Có đảm bảo rằng 'strptime (" 2014123 ","% Y% m% d ")' sẽ luôn cung cấp 'datetime (2014, 12, 3, 0, 0)' hoặc có thể là 'datetime (2014, 1, 23, 0, 0) '? – Matthias