我是Python的初学程序员,我不知道如何处理以下问题。有一个吨类似的问题,但没有与Python代码有关。
我试图比较字符串,但我不确定如何进行比较。我非常确定我需要取前两个数字(小时),如果它大于12则除以12 ......但这会带来问题。
问题:
时间转换(24小时至12小时)
编写一个允许的函数 用户将24小时时间格式转换为12小时格式(使用 '是''下午'附)。示例:来自' 1400'到下午2:00和#39;所有字符串 作为参数传入的长度为4,仅为 包含数字。
示例(测试/电话):
>>> convertTime('0000')
'12:00am'
>>> convertTime('1337')
'1:37pm'
>>> convertTime('0429')
'4:29am'
>>> convertTime('2359')
'11:59pm'
>>> convertTime('1111')
'11:11am'
任何输入或不同的方法都很棒!
答案 0 :(得分:8)
你可以使用日期时间模块,但是你也必须处理日期(你可以在那里插入你想要的观察者)。可能更容易简单地解析它。
更新:正如@JonClements在对原始问题的评论中指出的那样,可以通过一个班轮来完成:
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)
或者,以更加pythonic的方式做到:
hours, minutes = int(input[0:2]), int(input[2:4])
然后你必须决定时间是早上(hours
0到11之间)还是下午(hours
12到23之间)。还记得要处理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
答案 1 :(得分:2)
一些提示 int(“2300”)返回一个整数2300 2300是PM。 时间> = 1200是PM 0000到1200之间的时间是AM。
你可以创建一个带字符串的函数,将其计算为整数,然后检查它是否大于或小于上述条件并返回打印。