我在这里看了一会儿尝试所有不同类型的接受答案,但是它们与我自己的需求无关,90%需要静态输入当前日期,这是我不想做的事情< / p>
上下文
非常简单。
获取西班牙当前时间。
已经设置了一个变量,这是一个商定的开始时间。
已经设置了一个变量,这是一个约定的结束时间。
如果西班牙当前时间介于开始时间之间,请继续保存日志
检查线程是否解决了我的问题
由于日期时间的静态类型
,所有无用,低估或无关Check if time is between two days
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')
答案 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
,或者将start
和end
次设置为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值,所以你只需要改变你需要的值。