我正在测试arrow
中检查日期是否在一个日期范围内的能力:
>>> arrow.get('06/09/2017', 'DD/MM/YYYY') in arrow.Arrow.range('day', arrow.get('06/09/2017', 'DD/MM/YYYY'), arrow.get('06/07/2018', 'DD/MM/YYYY'))
True
>>> arrow.get('06/09/2017', 'DD/MM/YYYY') in arrow.Arrow.range('day', arrow.get('07/09/2017', 'DD/MM/YYYY'), arrow.get('06/07/2018', 'DD/MM/YYYY'))
False
到目前为止还不错。然后我尝试在相同的结构中使用.now()
(今天是2017年9月6日,上面测试的日期):
为什么结果False
尽管.now()
在范围内?
>>> arrow.Arrow.range('day', arrow.get('06/09/2017', 'DD/MM/YYYY'), arrow.get('06/07/2018', 'DD/MM/YYYY'))
[<Arrow [2017-09-06T00:00:00+00:00]>, <Arrow [2017-09-07T00:00:00+00:00]>, ...
这会给你想要的:
关键在Arrow类的floor()方法中:这限制了Arrow对象,这是必需的,因为(正如@excaza所提到的)range为您提供了午夜的day对象。在
我使用了utcnow()方法而不是now()方法,因为您的箭头。获取()使用创建utc日期。在
当前构造范围的方式是使用
'day'
作为range的frame
参数,因此,除非您的查询能够在午夜准确着陆,否则检查范围将返回False
。在在Arrow本身中,最简单的选择可能是使用^{} 或^{} 将查询规范化为如何构造范围:
注意,我已经将
tz
参数改为'local'
,因此与arrow.now()
的比较是正确的。我个人不想用时区来记录时间。在或者,您可以进行简单的逻辑检查,以查看当前时间是否在范围的最小值之后,而在范围的最大值之前:
^{pr2}$相关问题 更多 >
编程相关推荐