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

新手上路,请多包涵

我是 Python 的初级程序员,我不知道如何处理以下问题。那里有 很多 类似的问题,但是与 Python 代码无关。

我试图比较字符串,但我不确定如何进行比较。我很确定我需要取前两个数字(小时),如果它大于 12,则除以 12……但这会带来问题。

问题:

时间转换(24 小时到 12 小时)

编写一个函数,允许用户将 24 小时制时间格式转换为 12 小时制格式(附有“am”、“pm”)。示例:从“1400”到“2:00pm”。作为参数传入的所有字符串的长度均为 4,并且仅包含数字。

示例(测试/调用):

 >>> convertTime('0000')
'12:00am'
>>> convertTime('1337')
'1:37pm'
>>> convertTime('0429')
'4:29am'
>>> convertTime('2359')
'11:59pm'
>>> convertTime('1111')
'11:11am'

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

原文由 Winkleson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

您可以使用 datetime 模块,但是您还必须处理日期(您可以在任何地方插入)。简单地解析它可能更容易。


更新: 正如@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

原文由 GaretJax 发布,翻译遵循 CC BY-SA 3.0 许可协议

一些提示int(“2300”) 返回一个整数2300 2300是PM。 time >= 1200 是 PM 0000 到 1200 之间的时间是 AM。

您可以制作一个函数,它接受一个字符串,将其评估为整数,然后检查它是否大于或小于上述条件并返回打印。

原文由 arynaq 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题