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中的codeA>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