我有一个Rails应用程序用于乐队。乐队可以导入他们的节目,这些节目都发生在不同的时区。用UTC来存储这些事件似乎有很多工作要做。我必须确定所创建的任何节目的时区,然后在显示给用户时转换回节目的本地时区。有一个简单的插件来获取基于地理定位的UTC偏移量吗?这可能会有所帮助,但是有没有人看到我应该以UTC存储的主要原因?我知道以UTC存储时间戳可能是一个好主意......但是乐队活动时间?如何在事件中处理Rails应用程序中的时区
回答
我正在做类似的事情 - 一个事件列表的网站。在我的情况下,重要的是让时间标准化(使用UTC),因为我们有公布和出售时间要担心(即,当事件出现在网站上和出售链接出现时),而不仅仅是显示事件开始时间(它本身并不关心它所在的时区)。
从数据库中的UTC时间到给定场所的本地时间(即,显示事件列表中的本地时间)非常简单,使用沿着e.start.in_time_zone("#{e.venue.time_zone}")
行的东西。我无法弄清楚的是,将数据输入点的本地时间确定为需要转换为UTC的本地时间,而无需处理更改的Time.zone。
我发现有效的东西。看看这篇文章:http://steveluscher.com/archives/changing-a-times-zone-in-rails-keeping-the-same-local-representation。我添加了一个新文件(time_zone_support.rb)到我的config/initializers目录。以下是内容:
module ActiveSupport
class TimeWithZone
def zone=(new_zone = ::Time.zone)
# Reinitialize with the new zone and the local time
initialize(nil, ::Time.__send__(:get_zone, new_zone), time)
end
end
end
这使得在控制台下:
>> e.starts = Time.zone.parse("2010-09-12 10:00 am")
=> Sun, 12 Sep 2010 10:00:00 UTC +00:00
>> e.starts.zone = e.time_zone
=> "Pacific Time (US & Canada)"
>> e.starts
=> Sun, 12 Sep 2010 10:00:00 PDT -07:00
>> e.save
=> true
希望帮助你呢!
一个办法做到这一点是它们都存储在UTC,然后让用户决定他们希望看到他们在什么时区。
我想问为什么这有-1。然后我看到链接页面是捷克语或其他东西。 – Dan 2014-01-20 02:01:58
你不需要在这里担心UTC,因为该事件被捆绑到它发生的时间和地点。如果有人从夏威夷前往旧金山参加晚上8点的节目,这并不意味着节目将在下午4点开始。所以,你可以存储简单的时间和位置,不必担心TZ(因为大概只有时间和位置的形式)并将其存储在数据库中。
就Rails而言,所有的事件都会发生在它所在的TZ中,只是这个有趣的“位置”属性告诉读者事件真的在1000米以外。这意味着它可以为自己做正常的自动TZ转换,但读者无法辨别。它首先将转换为乐队输入的时间。晚上8点+“洛杉矶”,晚上10点+“塔尔萨,好吧。”
这里的一个问题是,节目是通过互联网播放的还是类似的,其中的位置与事件分离,在这种情况下你仍然可以进行上述操作,但让观众/潜在观众成员选择他们自己的TZ(或地理定位他们),并让应用程序在视图中显示时进行转换。
- 1. Rails应用程序 - 如何在当地时区输入事件
- 2. 如何从应用程序中删除事件处理程序?
- 3. 如何处理应用程序在IOS中被杀的事件?
- 4. 如何在Java中处理关闭的应用程序事件?
- 5. 如何处理在rails应用程序中输入时间
- 6. 如何在Ruby On Rails应用程序中处理Thumbs.db文件
- 7. 如何处理Rails应用程序中的时间差异?
- 8. 如何在全屏应用程序中处理可可事件
- 9. 如何丝域事件处理程序中的多层应用
- 10. 如何处理事件源应用程序中的域更改?
- 11. 如何中断事件处理程序
- 12. 如何在chrome应用程序中使用input type =“file”事件处理程序
- 13. 如何在C#中编写事件和事件处理程序?
- 14. 如何在事件处理程序中设置计时器?
- 15. 启动应用程序时的Android事件处理程序
- 16. 如何在JavaScript中编程调用mouseover事件处理程序
- 17. 如何在rails应用程序中处理肥皂数据?
- 18. 在Rails应用程序中处理程序的奇怪行为
- 19. 如何处理ASP.NET应用程序中的临时文件
- 20. 如何从事件处理程序中调用默认处理程序
- 21. 事件在Java中使用通用处理程序处理
- 22. 如何处理用户在Rails中的时区
- 23. 如何在MFC中启用或禁用事件处理程序?
- 24. 在应用程序中处理多个时区
- 25. 在ASP.NET中创建日历应用程序,处理时区
- 26. 在Web应用程序中处理时区
- 27. 在事件处理程序中删除jquery事件处理程序
- 28. 如何处理Rails/Webpacker/React应用程序中的图像?
- 29. 处理应用程序事件
- 30. GUI应用程序中的事件处理线程C++
仅供参考,这不再有效,因为get_zone已从时间 – 2012-01-30 16:59:03
中删除这就是我在Rails 3.2.8中使用的: def same_time_of_day_in_time_zone(zone = :: Time.zone) ActiveSupport :: TimeWithZone.new(nil,:: :Time.find_zone!(zone),self) end – 2012-10-29 21:32:47