我创建了多个具有不同scheduled_on
属性的计划对象。例如,每个对象都有一个日期,每个月的第一天下午4点到达。
一旦其中一个对象发生时区变化。该应用程序智能地将它配置为提前一小时或后面,以便它相对于其父级的时区。
问题是应用程序会将对象保存为下午4:00(在太平洋标准中),最终显示为(PDT或提前一小时或下午5:00)。这意味着我需要它在UTC中节省一个小时,以便在时间到来时,无论我们在哪个时区,它都将显示为下午4点。
什么是在Rails中确保这一点的最佳技术?
答案 0 :(得分:1)
我将通过指出在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是获得两个日期之间的天数的唯一方法,您可以通过减去两个DateTime来完成。这个,你不能用时间,因为当减去一个时间时,它不会完全划分24小时,你会得到一个无理数因为的时区转换。
这是我的问题所特有的。但是我通过将Time to DateTimes转换为找到距离的天数来解决我的问题,然后重新转换回时间以找到相对于TimeZone更改的UTC时间:
original_job.to_time + ( new_date.to_datetime - original_job.to_datetime ).to_i.days