2009-11-18 11 views
89

Cụ thể tôi có mã đơn giản hóa điều này:Tôi làm cách nào để tính toán khoảng thời gian (AM/PM) với datetime.strptime?

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) 

Điều gì cho? Có Python chỉ bỏ qua các specifier thời kỳ khi phân tích ngày hoặc tôi làm một cái gì đó ngu ngốc?

+4

Cảm ơn mọi người vì câu trả lời nhanh. Ước gì tôi có thể upvote nhiều hơn một lần. – Triptych

Trả lời

115

Các Python time.strftime docs nói:

Khi sử dụng với strptime() chức năng, chỉ thị %p chỉ ảnh hưởng đến lĩnh vực giờ đầu ra nếu chỉ %I được sử dụng để phân tích giờ.

Chắc chắn đủ, thay đổi %H thành %I làm cho nó hoạt động.

+1

Ugh. Tất nhiên. Cảm ơn. – Triptych

+0

Điều tuyệt vời * trừ khi * chuỗi thời gian của bạn có 0,00 giờ chiều, ('% I' bắt đầu lúc 1) !! –

9

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

12

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

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

Định dạng đang sử dụng %H thay vì %I. Vì %H là định dạng "24 giờ", nó có khả năng chỉ loại bỏ thông tin %p. Nó hoạt động tốt nếu bạn thay đổi %H thành %I.