Làm cách nào tôi có thể tính đến khoảng thời gian (AM / PM) bằng cách sử dụng strftime?


152

Cụ thể tôi có mã đơn giản hóa việc này:

from datetime import datetime
date_string = '2009-11-29 03:17 PM'
format = '%Y-%m-%d %H:%M %p'
my_date = datetime.strptime(date_string, format)

# This prints '2009-11-29 03:17 AM'
print my_date.strftime(format)

Đưa cái gì? Có phải Python chỉ bỏ qua công cụ xác định thời gian khi phân tích ngày hoặc tôi đang làm điều gì đó ngu ngốc?

Câu trả lời:


213

Các time.strftimetài liệu Python nói:

Khi được sử dụng với hàm strptime (), lệnh %pnày chỉ ảnh hưởng đến trường giờ đầu ra nếu lệnh %Iđược sử dụng để phân tích giờ.

Chắc chắn, thay đổi của bạn %Hđể %Ilàm cho nó hoạt động.


2
Điều này thật tuyệt vời trừ khi chuỗi thời gian của bạn có 0,00pm, ( %Ibắt đầu từ 1) !!
Andy Hayden

1
@AndyHayden là 12 giờ tối hoặc 12 giờ sáng. Không chắc chắn nếu 0 AM hoặc 0 PM có ý nghĩa. Chỉ trong định dạng 24 giờ giờ 0 giờ có ý nghĩa, nhưng sau đó không phải là AM / PM.
arun

Cũng lưu ý để có địa điểm của bạn trong kiểm tra. Nếu bạn đang sử dụng ngôn ngữ không sử dụng sáng / chiều, bạn sẽ phải chuyển sang ngôn ngữ sử dụng am / pm Tôi đã sử dụng% I và% p và% p bị bỏ trống khi sử dụng de_DE làm miền địa phương. Chuyển sang en_GB đã hiển thị% p.
Torsten

56
format = '%Y-%m-%d %H:%M %p'

Các định dạng được sử dụng %Hthay vì %I. Vì %Hlà định dạng "24 giờ", nên có thể chỉ cần loại bỏ %pthông tin. Nó hoạt động tốt nếu bạn thay đổi %Hthành %I.


23

Bạn đã sử dụng %H(định dạng 24 giờ) thay vì %I(định dạng 12 giờ).


15

Hãy thử thay% H (Giờ trên đồng hồ 24 giờ) bằng% I (Giờ trên đồng hồ 12 giờ)?

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.