Python用打印建议转换时间

时间:2018-02-12 05:06:46

标签: python python-2.7 datetime python-requests jupyter

语义错误:我如何得到" am"而不是" pm"我做错了什么?

from datetime import datetime
m2="23:00:00"

in_time = datetime.strptime(m2, "%H:%M:%S")
out_time = datetime.strftime(in_time, "%I:%M:%S %p")

print(out_time)

if out_time < "12:00:00" :
    print('Good morning.')
elif "12:00:00" <= out_time < "04:00:00":
    print('Good afternoon.')
else :
    print('Good evening.')

回答(这是错误的):

  

晚上11:00:00早上好。

2 个答案:

答案 0 :(得分:0)

您正在尝试比较时间字符串。相反,您应该比较datetime.time值,如:

代码:

def time_of_day_msg(in_time):
    if in_time < dt.time(hour=12):
        return 'Good morning.'
    elif in_time < dt.time(hour=16):
        return 'Good afternoon.'
    else:
        return 'Good evening.'

测试代码:

import datetime as dt
for time in ("1:00:00", "13:00:00", "23:00:00"):
    print(time, time_of_day_msg(
        dt.datetime.strptime(time, "%H:%M:%S").time()))

结果:

1:00:00 Good morning.
13:00:00 Good afternoon.
23:00:00 Good evening.

答案 1 :(得分:0)

如果你想获得AM,你需要一个时间来开始,这是在00:00和11:59之间,就像24小时制你在PM之后的PM。

另一个问题是,您正在将时间转换为字符串,其格式为每小时2个,然后比较字符串以确定要打印的内容。尝试比较可以使用构造函数而不是strptime生成的时间。

from __future__ import print_function
import datetime

in_time = dateteime.time(11, 15) # Time in H:M 11:15 AM
if in_time < datetime.time(12):  # Before Noon
    goodbit = "morning"
elif in_time < datetime.time(16):  # Before 4 PM (we already know > 12:00)
    goodbit = "afternoon"
else:  # (After 16:00)
    goodbit = "evening"
print("{} Good {}".format(in_time.strftime("%I:%M:%S %p"), goodbit)