以最有效的方式获得以分钟为单位的时差

时间:2015-04-27 03:39:30

标签: mysql ruby-on-rails ruby

在我的Rails应用程序中,我有一个名为Schedule的表,其中有一个名为arrival的字段,我输入了时间,我想由于某种原因它默认以下列格式存储在UTC中

2000-01-01 07:37:00 UTC

在我的控制器中,当我做类似Time.now的事情时,我会得到一个时间

2015-04-26 23:35:46 -0400

我的问题是需要将两个时间都放在相同的区域或其他东西,所以我可以计算差异。

我知道我可以在我的Time.now上添加4个小时然后制作它但是我怎样才能在几分钟内得到它们之间的差异?我想到了一个愚蠢的黑客,如果我加上4小时Time.now它会变成utc然后减去两者之间的差异。但是,存储在db中的时间有2001年的日期,而且这个有2015年的日期,所以它会起作用吗?我会建议你的答案或方法。感谢

1 个答案:

答案 0 :(得分:1)

这不是问题,Ruby在内部处理时区。

time1 = DateTime.parse('2000-01-01 10:00:00 UTC')
time2 = DateTime.parse('2000-01-01 10:00:00 -0100')
time2 - time1
# => (1/24)

即。 Ruby已经知道UTC和-0100中相同时间之间的差异是一小时。时差运算符已经做了正确的事情,如果你让它:)

但是,DateTime是Ruby,Time是C - 前者有更好的API,并且对数据库很有效,但后者更快。

编辑:以下是使用Time的示例,仍然相同:

time1 = Time.new(2000, 1, 1, 10, 0, 0, "+00:00")
time2 = Time.new(2000, 1, 1, 10, 0, 0, "-01:00")
time2 - time1
# => 3600.0

编辑:年份 2999 2000