Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么arrow.now()不在包含今日';情人节?_Python_Python 3.x_Arrow Python_Python Arrow - Fatal编程技术网

Python 为什么arrow.now()不在包含今日';情人节?

Python 为什么arrow.now()不在包含今日';情人节?,python,python-3.x,arrow-python,python-arrow,Python,Python 3.x,Arrow Python,Python 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.A

我正在测试在
箭头中检查日期是否在日期范围内的能力:

>>> 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日,即上述测试的日期):


这将为您提供您想要的:

>>> arrow.utcnow().floor('day') in arrow.Arrow.range('day', arrow.get('05/09/2017', 'DD/MM/YYYY'), arrow.get('06/07/2018', 'DD/MM/YYYY'))
True
关键是Arrow类的floor()方法:这限制了Arrow对象,并且是必需的,因为(正如@excaza提到的)范围在午夜为您提供day对象


我使用utcnow()方法而不是now()方法,因为您的arrow.get()用法会创建utc日期

当前构建范围的方式是使用
'day'
作为范围的
参数,因此,除非您的查询能够准确地在午夜到达,否则检查它范围将返回
False

在Arrow本身中,最简单的选项可能是使用或规范化查询以了解范围的构造方式:

>> myrange = arrow.Arrow.range('day', arrow.get('06/09/2017', 'DD/MM/YYYY'), arrow.get('06/07/2018', 'DD/MM/YYYY'), tz='local')
>> arrow.now().floor('day') in myrange
True
请注意,我已将
tz
参数更改为
'local'
,因此与
arrow.now()的比较是正确的。我个人尝试用UTC或epoch时间做任何事情,而不是跟踪时区

或者,您可以执行简单的逻辑检查,查看当前时间是否在范围最小值之后和范围最大值之前:

>> myrange = arrow.Arrow.range('day', arrow.get('06/09/2017', 'DD/MM/YYYY'), arrow.get('06/07/2018', 'DD/MM/YYYY'), tz='local')
>> myrange[0] <= arrow.now() <= myrange[-1]
True
myrange=arrow.arrow.range('day',arrow.get('06/09/2017','DD/MM/YYYY')、arrow.get('06/07/2018','DD/MM/YYYY')、tz='local')
>>myrange[0]您已按天构建了范围,因此从技术上讲,它不会包含返回的
arrow.now()
,除非您恰好在午夜调用它。选项包括:更改范围的构造方式、下限/上限查询日期或使用时间增量执行某些操作。@excaza:好的,我理解,谢谢。它将查找确切的文字日期(午夜)和
。now()
有正确的日期/周一/年,但没有时间。你介意把你的评论变成一个答案吗?这样我就可以接受了。我建议你用纪元时间来检查日期范围@excaza完全正确,他正要写同样的东西
>> myrange = arrow.Arrow.range('day', arrow.get('06/09/2017', 'DD/MM/YYYY'), arrow.get('06/07/2018', 'DD/MM/YYYY'), tz='local')
>> arrow.now().floor('day') in myrange
True
>> myrange = arrow.Arrow.range('day', arrow.get('06/09/2017', 'DD/MM/YYYY'), arrow.get('06/07/2018', 'DD/MM/YYYY'), tz='local')
>> myrange[0] <= arrow.now() <= myrange[-1]
True