如何在红宝石的不同时区比较这两个日期
代码:
if (mydate.to_datetime -
(120).minutes).to_datetime >
DateTime.now
puts mydate # 2019-05-30 20:42:34
mydate.to_time # 2019-05-30T20:42:34+00:00
# after subtracting 120 minutes 2019-05-30T18:42:34+00:00
puts DateTime.now # 2019-05-30T20:24:12+05:30
我需要从mydate减去120分钟,然后与currentdate进行比较。
答案 0 :(得分:1)
Time.parse
可以正确处理时区:
2.5.1 :001 > require 'time'
=> true
2.5.1 :002 > t1 = Time.parse('2019-05-30T19:37:18+00:00')
=> 2019-05-30 19:37:18 +0000
2.5.1 :003 > t2 = Time.parse('2019-05-30T19:37:30+05:30')
=> 2019-05-30 19:37:30 +0530
2.5.1 :004 > t1 > t2
=> true
2.5.1 :005 > t2 > t1
=> false
2.5.1 :006 > t1 == t2
=> false
2.5.1 :007 > t1 - t2
=> 19788.0 # result is in seconds, convert to whatever you need
假设您已经将这两个变量声明为DateTime
实例,其中t1
是2019-05-30T19:37:18+00:00
,而t2
是2019-05-30T19:37:30+05:30
,则可以直接运行比较并获取使用.to_time
2.5.1 :009 > t1 > t2
=> true
2.5.1 :010 > t2 > t1
=> false
2.5.1 :011 > t1 == t2
=> false
2.5.1 :012 > t1.to_time - t2.to_time
=> 19788.0
答案 1 :(得分:1)
以天为单位的差异:
%w[2019-05-30T19:37:18+00:00 2019-05-30T19:37:30+05:30].
map { |d| DateTime.iso8601(d) }.reduce(:-)
#⇒ (1649/7200)
小时:
%w[2019-05-30T19:37:18+00:00 2019-05-30T19:37:30+05:30].
map { |d| DateTime.iso8601(d) }.reduce(:-) * 24
#⇒ (1649/300)
在几分钟内:
%w[2019-05-30T19:37:18+00:00 2019-05-30T19:37:30+05:30].
map { |d| DateTime.iso8601(d) }.reduce(:-) * 24 * 60
#⇒ (1649/5)
结果为Rational
,以保持准确性。可能会将其转换为整数,浮点数或十进制。