2012-11-04 12 views
1

也許這個問題應該分成兩篇文章,但我目前有一些針對少數商業客戶的API。我目前使用ISO時區的ISO 8601時間戳來表示時間。但是,我不喜歡這些時間戳被附加到任何時區的想法,因爲無論您處於什麼時區,時間都應該是相同的。下午5點UTC應該是5PM CST等...在基於Ruby的REST API中表示本地時間戳

我知道您可以將ISO時間戳的Z關閉,並且它會被解釋爲您當地的任何時間。這是否正確?如果是這樣,我該如何在Ruby中做到這一點?我閱讀了Time課程的文檔,並沒有看到任何有關這方面的內容。

編輯:讓我重新說一點,或至少澄清一些事情。我尋找沒有附加到時區的時間戳的原因正是因爲我知道我的客戶端服務器和API服務器幾乎無法匹配。如果客戶使用時間提交事件,則該時間需要模糊地等於用戶正在處理的特定於事件的模糊區域設置。

這是一口...假設我正在處理事件調度程序。每個事件都屬於公司的店面或位置。當顯示某個位置的時間時,假定所顯示的時間位於該位置的時區,並且爲了清晰起見,不應在格式化爲用戶當地時區的時間顯示。如果我正在查看東海岸的調度程序,但是查看西海岸地區的事件,我應該看到的時間應該在西海岸的本地,而不是根據我的時區進行調整。

我知道一個解決方案可以簡單地存儲與其關聯的位置的時區信息。但用戶希望將時間轉換爲其時區的用例非常罕見,我寧願讓實現API更簡單一些......這實際上是我的原始實現,但在許多不同的環境和多個實現中實現了API編程語言,很明顯,爲時間戳的時區顯示多種語言的本地時間是一個障礙。如果用戶想將時間轉換爲當地時區,我可以輕鬆存儲位置對象本身的全球時區信息。

回答

1

我不知道你的意思是「無論你在什麼時區,時間都應該是一樣的。下午5點UTC應該是5點CST等。」。 5PM UTC明確不是 5PM CST!

無論如何,我不認爲你提出的是一個好的做法。假設您離開了Z,並且將時間戳解釋爲您所處的任何本地時間。由於這是一個網絡API,因此客戶端和服務器可能不在同一個時區。當客戶提交「本地」時間時,這意味着什麼?客戶端的本地時間(如果是這樣,服務器如何知道這是什麼?)?服務器上的本地時間?它含糊不清。這就是爲什麼只有合理的做法是在整個地方使用UTC的關鍵。

什麼可以如果它可能是相關的,將時區附加到時間戳。例如,「你應該在2012-11-10T22:00:00爲了紀念在第一次世界大戰中犧牲的士兵而沉默一分鐘」聽起來很奇怪,因爲Rememberance Day不在11月10日! 「你應該在2012-11-11T11:00:00 + 13:00觀察一分鐘的沉默」,一旦你把新西蘭時區放在那裏,聽起來會好很多......在這種情況下,你可以保留和時間戳(在本地或UTC)以及時區偏移量(例如,將它們都存儲在數據庫中)。

但是,它的確取決於您的時間代表什麼。例如,在「在春分點上,夕陽在18:00發生」,使用一個不符合時區限定的抽象時間(每個時區都是如此,或者你在談論太陽時間)是合理的。但在這個抽象時間附上一個日期沒什麼意義,所以我不認爲你會在這種情況下討論ISO8601。

+0

我修改了一個編輯,以解決大部分問題。我原本在運行時在手機上輸入了這個問題,我擔心這個問題的措辭不是很好......基本上,對於我的用例來說,用戶往往會發現本地的模糊位置屬於。 –

+0

就我個人而言,我可能只是將時區添加到事件時間戳中,以便用戶界面可以輕鬆地重建輸出中原始時區的原始本地時間。這是乾淨的,因爲所有內容都是明確的和明確的。除此之外,您可以比較時間(確定哪一個更早,哪個更晚),否則您無法做到這一點。但是如果你想做別的事情,我想我不得不讓別人回答,因爲我不知道Ruby。爲了比較,Python有「天真的日期時間」,它沒有時區的概念。 – Celada