我有这些日期和时间:
schedule.day_start # => 2014-09-27 15:30:00 UTC
date_now = Time.now # => 2014-09-27 15:11:14 +0200
date_now + 60.minutes # => 2014-09-27 16:11:14 +0200
我正在尝试检测在day_start
之前60分钟或更短时间内开始的所有计划。使用以下代码,我得到的回复是"NO"
,而不是"YES"
。
if schedule.day_start < (Time.now + 60.minutes)
"YES"
else
"NO"
end
为什么2014-09-27 15:30:00 UTC
大于2014-09-27 16:11:14 +0200
?
答案 0 :(得分:10)
将它们作为UTC工作日期,这样可以避免出现时区问题
if schedule.day_start.utc < (Time.now + 60.minutes).utc
...
答案 1 :(得分:0)
由于
2014-09-27 16:11:14 +0200
同时
2014-09-27 14:11:14 UTC
之前的
2014-09-27 15:30:00 UTC
使用Time
个对象,&#34;跟随&#34;转换为&#34;更大&#34;。
答案 2 :(得分:0)
在任何地方,如果时间A在时间B之后出现,那么A被认为大于B.同样在你的情况下。
schedule.day_start#=&gt; 2014-09-27 15:30:00 UTC
date_now + 60.minutes#=&gt; 2014-09-27 16:11:14 +0200这是2014-09-27 14:11:14 UTC。
在这里,你可以清楚地看到,time.now + 60.minutes是schedule.day_start之前的时间戳。因此,schedule.day_start大于Time.now + 60.minutes,这就是为什么你的“if”情况不成立,因此打印 NO 。
答案 3 :(得分:0)
请记住您的结果为 false ,因为格林尼治标准时间(GMT)要解决此问题并比较不使用格林尼治标准时间(UTC)的唯一日期时间,请尝试以下操作:
minutes = 60.minutes
t1 = Time.at(schedule.day_start.utc).to_datetime
t2 = Time.at((Time.now + minutes).utc).to_datetime
if t1 < t2
"YES"
else
"NO"
end