Ruby on rails ruby中的日期/时间比较

Ruby on rails ruby中的日期/时间比较,ruby-on-rails,ruby,date,time,comparison,Ruby On Rails,Ruby,Date,Time,Comparison,我有以下日期和时间: 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 我正在尝试检测所有在开始前60分钟或更短时间开始的日程安排。使用下面的代码,我得到的是一个响应“NO”,而不是“YES” 如果schedule.

我有以下日期和时间:

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
我正在尝试检测所有在
开始前60分钟或更短时间开始的日程安排。使用下面的代码,我得到的是一个响应
“NO”
,而不是
“YES”

如果schedule.day\u start<(Time.now+60.分钟)
“是的”
其他的
“没有”
结束
为什么
2014-09-27 15:30:00 UTC
大于
2014-09-27 16:11:14+0200

因为

2014-09-27 16:11:14 +0200
与…同步

2014-09-27 14:11:14 UTC
哪个在前面

2014-09-27 15:30:00 UTC

对于
Time
对象,“follows”转换为“greater”。

将日期作为UTC,这样可以避免时区问题

if schedule.day_start.utc < (Time.now + 60.minutes).utc
  ...
如果schedule.day\u start.utc<(Time.now+60.minutes).utc
...

任何地方,如果时间A在时间B之后,则认为A大于B。您的情况也是如此


日程安排。开始时间=2014-09-27 15:30:00 UTC

日期现在+60.5分钟#=>2014-09-27 16:11:14+0200,即2014-09-27 14:11:14 UTC

在这里,您可以清楚地看到,Time.now+60.minutes是schedule.day\u开始之前的时间戳。因此,schedule.day\u start大于Time.now+60.minutes,这就是为什么您的“if”案例不成立,因此会打印NO

请记住,您的结果是错误的,因为GMT,若要解决此问题并使用UTC比较没有GMT的唯一日期时间,请尝试以下操作:

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
minutes=60.5分钟
t1=时间.at(schedule.day\u start.utc).到日期时间
t2=时间点((Time.now+minutes.utc).to_日期时间
如果t1
谢谢Sawa的留言。但是,请你解释一下,对于时间对象,你所说的
是什么意思,“follows”翻译成“更大”
?如果时间
A
在时间尺度上紧跟在时间
B
之后,那么Ruby中的code
A>B
将是
true
(即
A
大于
B
).谢谢本杰明的留言。我试过了,但是
时间。现在。utc
显示了
2014-09-27 14:10:14 utc
,但当前时间是
2014-09-27 16:10:14 utc
。那么如何比较这两个日期呢?(
schedule.day\u start
显示“正确”的日期-而不是
-2小时
)您在哪种情况下获得
时间。现在
?因为,例如,如果将其分配给常量或全局变量,它可能会记录启动服务器的时间。同时检查您是否正确设置了
配置时区
,以及您的系统是否在
ntpdate
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