我有一個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