语义错误:我如何得到" 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早上好。
答案 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)