簡體   English   中英

在 Python 中將時間從 AM/PM 格式轉換為軍用時間

[英]Converting time from AM/PM format to military time in Python

在不使用任何庫的情況下,我試圖解決 Hackerrank 問題“ 時間轉換”,其問題陳述復制如下。

在此處輸入圖像描述

我想出了以下內容:

time = raw_input().strip()

meridian = time[-2:]        # "AM" or "PM"
time_without_meridian = time[:-2]
hour = int(time[:2])

if meridian == "AM":
    hour = (hour+1) % 12 - 1
    print ("%02d" % hour) + time_without_meridian[2:]
elif meridian == "PM":
    hour += 12
    print str(hour) + time_without_meridian[2:]

但是,這在一個測試用例上失敗了:

在此處輸入圖像描述

但是,由於測試用例對用戶是隱藏的,所以我很難找出問題發生在哪里。 “12:00:00AM”正確轉換為“00:00:00”,“01:00:00AM”正確轉換為“01:00:00”(填充零)。 這個實現可能有什么問題?

它甚至比你擁有它的方式更簡單。

hour = int(time[:2])
meridian = time[8:]
# Special-case '12AM' -> 0, '12PM' -> 12 (not 24)
if (hour == 12):
    hour = 0
if (meridian == 'PM'):
    hour += 12
print("%02d" % hour + time[2:8])

您已經解決了問題,但這里有另一個可能的答案:

from datetime import datetime


def solution(time):
    return datetime.strptime(time, '%I:%M:%S%p').strftime('%H:%M:%S')


if __name__ == '__main__':
    tests = [
        "12:00:00PM",
        "12:00:00AM",
        "07:05:45PM"
    ]
    for t in tests:
        print solution(t)

雖然它會使用 python 庫:-)

我想通了:它正在將“12:00:00PM”轉換為“24:00:00”而不是“12:00:00”。 我修改了代碼如下:

time = raw_input().strip()

meridian = time[-2:]        # "AM" or "PM"
time_without_meridian = time[:-2]
hour = int(time[:2])

if meridian == "AM":
    hour = (hour+1) % 12 - 1
    print ("%02d" % hour) + time_without_meridian[2:]
elif meridian == "PM":
    hour = hour % 12 + 12
    print str(hour) + time_without_meridian[2:]

導致它通過所有測試用例(見下文)。

在此處輸入圖片說明

from datetime import datetime

#Note the leading zero in 05 below, which is required for the formats used below

regular_time = input("Enter a regular time in 05:48 PM format: ")

#%I is for regular time. %H is for 24 hr time, aka "military time"
#%p is for AM/PM

military_time = datetime.strptime(regtime, '%I:%M %p').strftime('%H:%M')

print(f"regular time is: {regular_time"}
print(f"militarytime is {military_time}")

事實證明,以下鏈接非常有用: https : //strftime.org/

dt_m = datetime.datetime.fromtimestamp(m_time)
hour_m = (dt_m.hour%12)+1  #dt_m.hour+1
offset_dt = datetime.datetime(dt_m.year, dt_m.month, dt_m.day, hour_m , dt_m.minute, dt_m.second, dt_m.microsecond)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM