我将通过指出一些关于在 Rails 中添加与时区相关的时间的好处来回答这个问题。
当您添加时间时,尽管时区发生变化,但时间会以 UTC 分配以保持相同的时间:
t = Time.now
-> 2012-08-10 13:17:01 +0200
t + 90.days
-> 2012-11-08 13:17:01 +0100
DateTime 不会这样做。DateTime 将在它开始的同一 TimeZone 中上升一个小时或下降一个小时:
dt = DateTime.now
=> Fri, 10 Aug 2012 13:16:54 +0200
dt + 90.days
=> Thu, 08 Nov 2012 13:16:54 +0200
但是 DateTime 是获取两个日期之间天数的唯一方法,您可以通过减去两个 DateTimes 来做到这一点。这一点,你不能用时间来做,因为当减去时间时,它不会除以完美的 24 小时,因为时区切换,你会得到一个无理数。
这是针对我的问题的。但是我通过将 Time 转换为 DateTimes 以查找距离的天数解决了我的问题,然后重新转换回时间以找到相对于 TimeZone 更改的 UTC 时间:
original_job.to_time + ( new_date.to_datetime - original_job.to_datetime ).to_i.days