Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chuyển đổi giờ 12h sang 24h trong Python

Chuyển đổi định dạng thời gian từ 12 giờ (AM/PM) sang 24 giờ. Xử lý edge case: 12 AM → 00, 12 PM → 12.

Quy tắc

  • AM: giữ nguyên giờ (trừ 12 AM → 00).
  • PM: cộng 12 (trừ 12 PM → 12).

Hàm chuyển đổi

def convert_12h_to_24h(time_str):
    """
    Input: 'HH:MM:SS AM/PM'
    Output: 'HH:MM:SS' (24h)
    """
    period = time_str[-2:].upper()
    hour = int(time_str[:2])
    
    if period == 'AM':
        if hour == 12:
            hour = 0
    else:  # PM
        if hour != 12:
            hour += 12
    
    return f"{hour:02d}{time_str[2:8]}"

# Test
tests = ["12:20:20 AM", "12:20:20 PM", "01:30:45 PM", "11:59:59 AM"]
for t in tests:
    print(f"{t} → {convert_12h_to_24h(t)}")

Kết quả

12:20:20 AM → 00:20:20
12:20:20 PM → 12:20:20
01:30:45 PM → 13:30:45
11:59:59 AM → 11:59:59

Sử dụng datetime (khuyên dùng)

from datetime import datetime

def convert_dt(time_str):
    dt = datetime.strptime(time_str, "%I:%M:%S %p")
    return dt.strftime("%H:%M:%S")

print(convert_dt("12:20:20 PM"))  # 12:20:20
print(convert_dt("01:30:45 PM"))  # 13:30:45

Lấy giờ hiện tại và chuyển

from datetime import datetime
now = datetime.now()
print("12h:", now.strftime("%I:%M:%S %p"))
print("24h:", now.strftime("%H:%M:%S"))

Lưu ý

  • %I = 12h, %H = 24h, %p = AM/PM.
  • Dùng datetime module chuẩn thay vì tự parse string (tránh bug edge case).
  • Xử lý timezone: dùng pytz hoặc zoneinfo (Python 3.9+).