为什么介于?之间 ruby中Date和DateTime的工作方式不同?

Mag*_*gne 3 ruby datetime ruby-on-rails date

该文档说:

介于?(min,max)之间

如果当前对象的时间在指定的最小和最大时间内,则返回true.

在Ruby中:

>> DateTime.now.between?(DateTime.now, DateTime.now+1)
=> false
>> Date.today.between?(Date.today, Date.today+1)
=> true
Run Code Online (Sandbox Code Playgroud)

通过使用.currentRails中的差异变得更加明显,因为你会特别是承担这一方法将有相似的行为上DateTime和Date:

>> DateTime.current.between?(DateTime.current, DateTime.current+1)
=> false
>> Date.current.between?(Date.current, Date.current+1)
=> true
Run Code Online (Sandbox Code Playgroud)

这是故意的行为吗?如果是这样,为什么?处理min区间边缘时的行为并不是特殊的,这似乎很奇怪.特别是当考虑到该max部分是特殊的时:

>> DateTime.now.between?(DateTime.now-1, DateTime.now)
=> true
>> Date.today.between?(Date.today-1, Date.today)
=> true
Run Code Online (Sandbox Code Playgroud)

小智 5

让我们启动irb并运行这些代码:

"#{DateTime.now.inspect} \n #{DateTime.now.inspect}"
Run Code Online (Sandbox Code Playgroud)

结果将是这样的:

#<DateTime: 2017-03-22T11:42:28+03:00 ((2457835j,31348s,373353553n),+10800s,2299161j)>
#<DateTime: 2017-03-22T11:42:28+03:00 ((2457835j,31348s,373449152n),+10800s,2299161j)>
Run Code Online (Sandbox Code Playgroud)

如你所见,纳秒之间存在差异(373353553n <373449152n)

让我们假设差异等于'x',而DateTime.now等于'Now',然后:

1)DateTime.now.between?(DateTime.now,DateTime.now + 1.second)

Now.between?(Now + x,Now + x + x + 1.second)=> false

2)DateTime.now.between?(DateTime.now-1,DateTime.now)

Now.between?(现在+ x-1.second,Now + x + x)=> true