2017-08-31 37 views
1

我正在構建一個具有企業數據庫的應用程序,並且它們具有開始/結束時間等屬性。 9:00 – 18:00。還有一大堆其他對象有一些時間/日期信息關聯。在Ruby/Rails中處理沒有時區的時間/日期時間

這些對象位於不同的時區,應用程序通常不關心它們的確切位置。網站編輯和應用程序的最終用戶也在不同的時區。

我正在尋找一件非常簡單的事情 - 我希望編輯器提交的日期/時間對象與其提交時完全一樣,然後最終用戶應該看到完全相同的日期/時間值。

一切都很好,在JavaScript的土地上,Postgres也很樂意保存我給它的任何日期時間,但Rails試圖在任何地方應用它的時區邏輯 - 我不希望它既不是UTC,也不是本地的,也沒有任何其他時區 - 我想只存儲原始值 - 並且Ruby(和Rails)似乎根本沒有這樣簡單的概念。

我真的不想將日期/時間存儲爲數字或字符串,我也不想使用ruby Time對象,因爲它似乎總是有時區概念。

所以我想知道 - 是否有任何紅寶石庫處理日期/時間沒有區域?

謝謝

+1

_「我不希望它既不是UTC,也不是本地的,也不是任何其他時區」 - 由於JavaScript Date數據庫實例也有時區信息,並且_「在JavaScript-land中一切都很好」 ,我不明白爲什麼這應該成爲Ruby/Rails中的問題。你能舉個例子嗎? – Stefan

回答

1

Rails添加對Rails 5.1的所有DateTime列的時區和啓動,Time列也時區察覺。它們將默認保存爲數據庫中的UTC,然後在被調用時以UTC或您在application.rb中指定的時區返回給您。所以,在存儲DateTimeTime的時區中並沒有真正的出路,但您可以根據需要顯示這些值。

您可以使用如何改變你的DateTimeTime對象的顯示和使用this helpful site用於玩了的strftime方法。

或者,如果您不關心使用與DateTimeTime相關聯的任何方法,則可以將此信息保存爲字符串。我建議擁抱默認的UTC行爲,但不要擔心太多,因爲如果所有內容始終保存爲UTC,並且您沒有在application.rb中設置時區,那麼您可以依靠總是獲得相同的值返回給您當你需要它們時。