尝试在Python 3中将时间转换为整数

时间:2018-07-09 18:28:40

标签: python python-3.x datetime

我一般对Python和编程都不熟悉,并且我已经在这个特定问题上工作了大约四个小时。 我正在尝试将时间(例如12:30)转换为“ if”语句中可用的内容。 到目前为止,这是我尝试过的:

time = input("Enter the time the call starts in 24-hour notation:\n").split(":")
if time >= 8:30 and time <= 18:00:
    print("YES")

尝试执行该操作时,出现无效的语法错误。 当我尝试将时间转换为整数[callTime = int(time)]时,收到一条错误消息,指出

  

int()参数必须为字符串

这只是我正在研究的整个问题的一部分,但是我想我可以找出其余的问题,如果我能从这个问题上获得一个切入点。 尽管我不相信我可以在这个特定问题上使用datetime;任何事情都会有所帮助。

编辑:更正了整数(时间)

4 个答案:

答案 0 :(得分:1)

8:30不是有效的数据类型。将其转换为整数以使其正常工作(8:30 = 8小时30分钟= 8 * 60 + 30分钟)

>>> time = input("Enter the time the call starts in 24-hour notation:\n").split(":")
Enter the time the call starts in 24-hour notation:
12:30
>>> time
['12', '30'] # list of str
>>> time = [int(i) for i in time] # will raise an exception if str cannot be converted to int
>>> time
[12, 30] # list of int
>>> 60*time[0] + time[1] # time in minutes
750
>>> 

要在几秒钟内获得它,就像12:30:58,请在最后一行中对time_in_sec = time[0] * 3600 + time[1] * 60 + time[2]做同样的事情。

由于具有模数属性,可以保证只有一个“真实”时间对应于转换为整数的小时。
针对您的问题,创建一个返回整数的函数to_integer(time_as_list),然后将用户输入与to_integer('18:00'.split(':'))to_integer('8:30'.split(':'))

进行比较

答案 1 :(得分:1)

手动处理时间并非易事。我建议您使用支持时间转换,比较等的datetime模块。

from datetime import datetime as dt
t = input("...")
t_object = dt.strptime(t, "%H:%M")
if t_object >= dt.strptime("8:30", "%H:%M") and \
   t_object <= dt.strptime("18:00", "%H:%M"):
    do_your_stuff()

答案 2 :(得分:0)

您正在使用冒号,其中Python需要数字或变量名。在以下语句中:if time >= 8:30 and time <= 18:00:,您需要将时间值放在引号("8:30")中,因为它们不是数字。但是,然后,您将遇到比较两个非数字值与>=<=语句的问题。比较仅适用于实际值,而冒号会将值转换为字符串,而不是int或float。最好将stripping的时间转换为整数,以冒号进行比较和其他操作,然后可以根据需要重新添加冒号。

答案 3 :(得分:0)

我对这个问题的看法(没有datetime):

answer = input("Enter the time the call starts in 24-hour notation:\n")
t = tuple(int(i) for i in answer.split(':'))

if (8, 30) <= t <= (18, 0):
    print("YES")