如何在Python中访问时间的午夜时刻?

3

我在使用Python访问时间的meridiem部分时遇到了问题。

考虑以下Python代码:

import datetime
time = input("Enter the time : (HH:MM:AM/PM)")
# the above time is in string format so to make it in datetime.datetime type
# we need to use strptime function.
time = datetime.datetime.strptime(time, "%H:%M:%p")
# now to access different parts of variable time:-
print(time.hour)  # to access hour
print(time.minute)  # to access minute

但是我不知道如何检查用户输入的是AM还是PM。
请帮忙。

谢谢。

4个回答

1
考虑下面与解释器的会话:

以下是需要翻译的内容:

>>> import time
>>> time.strptime('9:00 AM', '%I:%M %p')
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=9, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
>>> time.strptime('9:00 PM', '%I:%M %p')
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=21, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)

如果你想确定是上午还是下午,你可以使用以下内容:
>>> get_meridiem = lambda tm: 'AM' if tm.tm_hour < 12 else 'PM'
>>> get_meridiem(time.strptime('9:00 AM', '%I:%M %p'))
'AM'
>>> get_meridiem(time.strptime('9:00 PM', '%I:%M %p'))
'PM'
>>> get_meridiem(time.strptime('12:00 PM', '%I:%M %p'))
'PM'
>>> get_meridiem(time.strptime('11:59 AM', '%I:%M %p'))
'AM'

1

time.hour 返回24小时制的小时数(0-23)。如果小时数小于12,则是上午,否则是下午。


1
你正在使用 `%H`。
time = datetime.datetime.strptime(time, "%H:%M:%p")

%H 代表24小时制时间格式。而你要解析的时间字符串是12小时制的,因此,你应该使用%I代替12小时格式。

time = datetime.datetime.strptime(time, "%I:%M:%p")
< p > strptime 在解析小时为24小时时间格式时可能会忽略 meridiem。


1
你离答案很近了,只需要对strptime应用反向操作即可。
amorpm = time.strftime("%p")
print(amorpm)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接