Python “转换字符串”;上午";或;PM";然后添加到没有日期的时间

Python “转换字符串”;上午";或;PM";然后添加到没有日期的时间,python,python-3.x,time,Python,Python 3.x,Time,我正在寻找将am/pm字符串转换为时间的方法,以便在一天中的两个不同时间之间进行比较。我试着使用time.strtime或类似的东西,但它们似乎都需要日期和时间 我的代码如下: current_hour = 12 current_minute = 37 current_section = "PM" due_hour = 9 due_minute = 0 due_section = "AM" import datetime ct_time = str(d

我正在寻找将am/pm字符串转换为时间的方法,以便在一天中的两个不同时间之间进行比较。我试着使用
time.strtime
或类似的东西,但它们似乎都需要日期和时间

我的代码如下:

current_hour = 12
current_minute = 37
current_section = "PM"
due_hour = 9
due_minute = 0
due_section = "AM"

import datetime

ct_time = str(datetime.time(current_hour, current_minute))+current_section
print(ct_time)
due_time = str(datetime.time(due_hour, due_minute))+due_section
print(due_time)

ct_time_str = time.strptime(ct_time, '%H:%M:%S') # how to format this to time?

due_time_str= time.strptime(due_time,'%H:%M:%S') # how to format this to time?

if (ct_time_str>due_time_str):
   print("still have time to turn in assignment")
else:
   print("too late")
获取以下错误,不确定如何从
str
转换为
'time'

回溯(最近一次呼叫最后一次):
文件“main.py”,第15行,在
ct_time_str=time.strtime(ct_time,'%H:%M:%S'))
NameError:未定义名称“时间”

datetime可能会令人困惑,因为模块和类都称为datetime

将导入更改为
从datetime导入datetime,time
。此外,进口应该排在最前面,但这并不是绝对必要的

分配
ct\u时间
due\u时间
时,使用
str(datetime.time(args))
,它应该是
str(time(args))

strtime来自datetime,而不是time,因此将
time.strtime(args)
更改为
datetime.strtime(args)

同样像DeepSpace&martineau所说的,您需要将“%p”添加到格式字符串中,以说明AM/PM部分

最终代码:

from datetime import datetime, time

current_hour = 12
current_minute = 37
current_section = "PM"
due_hour = 9
due_minute = 0
due_section = "AM"

ct_time = str(time(current_hour, current_minute))+current_section
print(ct_time)
due_time = str(time(due_hour, due_minute))+due_section
print(due_time)

ct_time_str = datetime.strptime(ct_time, '%H:%M:%S%p')

due_time_str= datetime.strptime(due_time,'%H:%M:%S%p')

if (ct_time_str < due_time_str):
   print("still have time to turn in assignment")
else:
   print("too late")
从日期时间导入日期时间,时间
当前小时=12
当前分钟=37
当前节=“PM”
到期时间=9小时
到期日/分钟=0
到期日
ct_时间=str(时间(当前_小时,当前_分钟))+当前_段
打印(ct\U时间)
到期时间=str(时间(到期小时、到期分钟))+到期段
打印(到期时间)
ct_time_str=datetime.strtime(ct_time,'%H:%M:%S%p'))
到期时间=datetime.strtime(到期时间,%H:%M:%S%p)
如果(ct时间长度<到期时间长度):
打印(“还有时间交作业”)
其他:
打印(“太晚”)
编辑:
if(ct\u time\u str
更改为
if(ct\u time\u str>due\u str):

您是否收到错误?如果是这样,您会得到什么错误?我猜这不是因为日期,而是因为您没有解析
AM/PM
部分(
%p
指令)。请参见@DeepSpace:建议,使用
time.strtime(ct\u-time,%H:%M:%S%p')
。仍然得到相同的错误,表示时间未定义:ct\u-time\u-str=time.strtime(ct\u-time,%H:%M:%S%p')名称错误:名称“time”未定义汉克代码没有错误,当我使用
print(due\u-time\u-str)
它为什么返回1900-01-01 09:00?不是上午9:00:00。datetime对象包含日期和时间,如果您只想使用时间组件,请使用
due\u time\u str.time()
。我刚才注意到的另一件事是你在if语句中的比较是错误的,应该是ct_time大于。