Python datetime - thiết lập giờ và phút cố định sau khi sử dụng strptime để lấy ngày, tháng, năm


173

Tôi đã chuyển đổi thành công một số 26 Sep 2012định dạng sang 26-09-2012sử dụng:

datetime.strptime(request.POST['sample_date'],'%d %b %Y')

Tuy nhiên, tôi không biết cách đặt giờ và phút của một thứ gì đó như ở trên thành 11:59. Có ai biết cách để làm điều này không?

Lưu ý, đây có thể là một ngày trong tương lai hoặc bất kỳ một ngày ngẫu nhiên nào, không chỉ là ngày hiện tại.

Câu trả lời:


362

Sử dụng datetime.replace:

from datetime import datetime
date = datetime.strptime('26 Sep 2012', '%d %b %Y')
newdate = date.replace(hour=11, minute=59)

Cảm ơn đã trả lời nhanh chóng! :) Chỉ tò mò nếu có một cách để làm điều đó mà không có biến ngày thêm? (Tôi là một người mới chơi python)
user1678031

2
Vâng, chỉ cần làm date = datetime.strptime('26 Sep 2012', '%d %b %Y').replace(hour=11, minute=59). Tôi đã sử dụng biến phụ để dòng không quá dài :)
nneonneo

14
Cũng đáng chú ý: datetime.replacetrả về một bản sao mới của datetime (vì datetimelà bất biến): nó giống như str.replacetrong vấn đề đó.
nneonneo

Làm cách nào tôi có thể xóa mọi thứ sau '2016-06-01' để giờ phút và giây đó biến mất?
PV8

46

datetime.replace () sẽ cung cấp các tùy chọn tốt nhất. Ngoài ra, nó cung cấp cơ sở để thay thế ngày, năm và tháng.

Giả sử chúng ta có một datetimeđối tượng và ngày được biểu diễn là: "2017-05-04"

>>> from datetime import datetime
>>> date = datetime.strptime('2017-05-04',"%Y-%m-%d")
>>> print(date)
2017-05-04 00:00:00
>>> date = date.replace(minute=59, hour=23, second=59, year=2018, month=6, day=1)
>>> print(date)
2018-06-01 23:59:59

8
Giá trị gia tăng của câu trả lời của bạn so với câu trả lời của nneonneo được đăng 5 năm trước bạn?
Samuel Dauzon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.