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') |
就像错误所说的那样,你试图将
1 | if current_time_spain >= start or current_time_spain <= end: |
用
1 | if current_time_spain.time() >= start or current_time_spain.time() <= end: |
它应该是有效的。另一种方法是从一开始就将
您正在将
如果你只想比较时间,那为什么不简单地比较来自
不能在时间内比较日期时间,但可以继续使用时间增量来创建要比较的开始日期和结束日期。使用此解决方案,您的代码可能会变成:
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值,因此只需要更改所需的值。