datetimeモジュールを使用することもできますが、その場合は日付も処理する必要があります(必要なものをそこに挿入できます)。おそらくそれを単純に解析する方が簡単です。
更新: @JonClementsが元の質問へのコメントで指摘したように、それは1つのライナーで行うことができます。
from datetime import datetime
def convertTime(s):
print datetime.strptime(s, '%H%M').strftime('%I:%M%p').lower()
次の方法で、入力文字列を時間と分の部分に分割できます。
hours = input[0:2]
minutes = input[2:4]
次に、値を解析して整数を取得します。
hours = int(hours)
minutes = int(minutes)
または、よりPython的な方法でそれを行うには:
hours, minutes = int(input[0:2]), int(input[2:4])
次に、時刻を午前(hours
0〜11)にするか午後(12〜23)にするかを決定する必要がありhours
ます。また、次の特殊なケースを扱うことを忘れないでhours==0
ください。
if hours > 12:
afternoon = True
hours -= 12
else:
afternoon = False
if hours == 0:
# Special case
hours = 12
これで必要なものがすべて揃ったので、残っているのは結果をフォーマットして印刷することです。
print '{hours}:{minutes:02d}{postfix}'.format(
hours=hours,
minutes=minutes,
postfix='pm' if afternoon else 'am'
)
それを関数にまとめ、いくつかのショートカットをとると、次の結果が残ります。
def convertTime(input):
h, m = int(input[0:2]), int(input[2:4])
postfix = 'am'
if h > 12:
postfix = 'pm'
h -= 12
print '{}:{:02d}{}'.format(h or 12, m, postfix)
convertTime('0000')
convertTime('1337')
convertTime('0429')
convertTime('2359')
convertTime('1111')
結果:
12:00am
1:37pm
4:29am
11:59pm
11:11am