关于python:当前时间是否包含在两个日期中

Python - Is current time within two datetime values

我在这里看了一会儿,尝试了各种不同的可接受的答案,但它们与我自己的需求无关,90%的人需要静态输入当前日期,这是我不想做的。

语境

很简单。

获得目前在西班牙的时间。

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

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

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

检查线程以解决我的问题

由于日期时间的静态类型,所有无用、被否决或不相关的内容

python当前时间

比较日期python

将字符串转换为日期时间

比较日期和日期时间

检查时间是否在两天之间

将字符串转换为日期时间

比较datetime.timedelta是否在两个值之间

迄今为止的代码

1
2
3
4
5
6
7
8
9
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上的一个线程中提取的,这是一个公认的答案,当我运行这个时,它给出了一个类型错误。

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

接受应答码

1
2
3
4
5
6
7
8
9
10
11
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')

就像错误所说的那样,你试图将datetime对象与time对象进行比较,而这些对象是不可能的……幸运的是,datetime对象有一个内置的方法来转换为time对象,即.time()。因此,您可以替换:

1
if current_time_spain >= start or current_time_spain <= end:

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

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


您正在将datetime对象与日期和时间进行比较,而只有time对象,如错误中所述。

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

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


不能在时间内比较日期时间,但可以继续使用时间增量来创建要比较的开始日期和结束日期。使用此解决方案,您的代码可能会变成:

1
2
3
4
5
6
7
8
9
10
11
12
13
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值,因此只需要更改所需的值。