6

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

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

问题:

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

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

示例(测试/调用):

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

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

4

3 回答 3

10

你可以使用 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])

然后你必须决定时间是在早上(hours0 点到 11 点之间)还是下午(hours12 点到 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
于 2012-11-25T19:34:33.923 回答
2

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

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

于 2012-11-25T19:33:33.650 回答
1
import datetime

hour = datetime.datetime.now().strftime("%H")
minute = datetime.datetime.now().strftime("%M")
if int(hour) > 12:
    hour = int(hour) - 12
    amPm = 'PM'
else:
    amPm = 'AM'
if int(hour) == 12:
    amPm = 'PM'
if int(hour) == 0:
    hour = 12
    amPm = 'AM'
strTime = str(hour) + ":" + minute + " " + amPm
print(strTime)

从日期时间获取小时和分钟。将小时转换为 int。检查 int(hour) > 12。如果是,则从 AM 更改为 PM。使用 int(hour) - 12 分配小时。检查小时是否为 0 以表示 12 AM 异常。检查小时是否为 12 点,因为 12 点例外。将小时转换回字符串。打印时间。

于 2021-11-23T04:05:02.503 回答