Python - 当前时间是两个日期时间值

时间:2018-06-05 11:16:50

标签: python datetime

我在这里看了一会儿尝试所有不同类型的接受答案,但是它们与我自己的需求无关,90%需要静态输入当前日期,这是我不想做的事情< / p>

上下文

非常简单。

获取西班牙当前时间。

已经设置了一个变量,这是一个商定的开始时间。

已经设置了一个变量,这是一个约定的结束时间。

如果西班牙当前时间介于开始时间之间,请继续保存日志

检查线程是否解决了我的问题

由于日期时间的静态类型

,所有无用,低估或无关

Python current time

Compare dates Python

Convert string into datetime

Compare date and datetime

Check if time is between two days

Convert string into datetime

Compare if datetime.timedelta is between two values

到目前为止

代码

now_time_uk = datetime.datetime.now()
current_time_spain = now_time + datetime.timedelta(hours=1)
start = datetime.time(10, 50)
end = datetime.time(16, 00)

if current_time_spain >= start or current_time_spain <= end:
    print('Start logging')
else:
    print('No need to log')

上面的代码是从S.O上的一个线程中提取的,这是一个公认的答案,当我运行它时,它给出了一个TypeError

TypeError: can't compare datetime.datetime to datetime.time

接受的答案代码

now_time_uk = datetime.datetime.now()
print(now_time_uk)
current_time_spain = now_time_uk + datetime.timedelta(hours=1)
start = datetime.time(10, 50)
end = datetime.time(17, 00)
print(current_time_spain.time())

if current_time_spain.time() >= start and current_time_spain.time() <= end:
    print('Start logging')
else:
    print('No need to log')

3 个答案:

答案 0 :(得分:2)

如错误所示,您试图将datetime个对象与time个对象进行比较,这是不可能的......幸运的是,datetime对象有一个内置的转换方法一个time对象,即.time()。所以你可以替换:

if current_time_spain >= start or current_time_spain <= end:

使用

if current_time_spain.time() >= start or current_time_spain.time() <= end:

它应该有效。另一种方法是从current_time_spain对象开始设置time,或者将startend次设置为datetime个对象而不是time

答案 1 :(得分:1)

您将datetime对象与日期&amp;进行比较只有time的时间,如错误

中所述

datetime.datetime.now()这会返回日期时间,而datetime.time(10, 50)会返回时间。

如果您只想比较时间,那么为什么不简单地比较now()的小时和分钟

答案 2 :(得分:0)

您无法比较一段时间内的日期时间,但您可以继续使用TimeDelta来创建开始结束日期进行比较。使用此解决方案,您的代码可能变为:

now_time_uk = date time.datetime.now()
current_time_spain = now_time + datetime.timedelta(hours=1)
start_hours = 10
start_minutes = 50
end_hours = 16
end_minutes = 0
time_spain_start = current_time_spain + datetime.timedelta(hours=start_hours, minutes=start_minutes)
time_spain_end = current_time_spain + datetime.timedelta(hours=end_hours, minutes=end_minutes)

if current_time_spain >= time_spain_start or current_time_spain <= spain_time_end:
    print “Start logging”
else:
    print “No need to log”

通过这种方式,您还可以为TimeDelta对象的每个参数添加一个变量,以便为结束日期提供不同的时间,即使该日期是下一个或您想要或需要的任何日期。我们可以设想将所有变量小时分钟初始化为0值,所以你只需要改变你需要的值。