Python上24小时时间转换为12小时制(ProblemSetQuestion)

时间:2012-11-25 19:26:16

标签: python python-3.x

我是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'

任何输入或不同的方法都很棒!

2 个答案:

答案 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。

你可以创建一个带字符串的函数,将其计算为整数,然后检查它是否大于或小于上述条件并返回打印。