我的工作將在只有一個時區,使用的系統,但與公開的日期和時間UTC其他系統集成,所以我們認爲我們去UTC全方式也是如此。我們以前也聽說過用utc存儲你的時間是一種方式,所以它感覺是最簡單的方法來減少麻煩。但最近我們遇到了一些麻煩。我們在系統中記錄對用戶有價值的事件,因此我們讓用戶搜索並查看它們。瑞典處於+1時區,因此當地時間09:00的活動將被存儲爲0800 utc時間。當向用戶顯示事件時,我們可以成功地將它們轉換回當地時間,直到夏令時剛剛開始時爲止。將0800 utc翻譯成當地時間現在將增加2小時。現在記錄的事件似乎發生在10:00。我該如何處理?在這種情況下,存儲的時間與實際保存到db的時間相同,我可以只查看日期並根據dst在特定時間打開或關閉進行調整。但是,我認爲我需要一個通用的解決方案,因爲在系統中會有不同時間(在其他地方)創建需要代表未來和過去時間點的時間戳。對我來說,它看起來像我有2個選項。 1.回到當地時間存儲,當我與其他使用utc的系統集成時,做一些額外的工作,或2.每個utc時間戳存儲一些數據,可以告訴我是否在dst期間創建了時間戳。我錯了嗎?對?遺漏了什麼?UTC和DST對過去和未來事件
回答
您始終可以使用getTimezoneOffset
方法獲取客戶端時區偏移量。現在剩下的就是將此時區偏移量應用於存儲在數據庫中的UTC日期,並向最終用戶顯示正確的日期。另一方面,如果您需要在數據庫中記錄事件時顯示用戶使用的時區偏移量,那麼您肯定會在數據庫中另外添加一列以記錄此偏移量。當你想要處理多個時區時,事情會變得棘手:當你想在瑞典的用戶提交的印度用戶顯示一條記錄時會發生什麼?
小心這種方法。對'getTimezoneOffset'的調用應該根據特定的UTC日期和時間進行。調用'new Date()。getTimezoneOffset()'並將結果應用於任意值,忘記這是* current * offset,這可能與所討論的時間有很大不同。 –
你缺少的主要原因是你不能僅僅把瑞典想象成+1時區。時區和時區偏移是兩個完全不同的事情。有關詳細信息,請閱讀the timezone tag wiki。
相反,你可以採取以下兩種方法之一:
想想的時區中的術語是IANA tzdb identifier。對於瑞典,請使用
Europe/Stockholm
。使用此時區,使用實現tz數據庫的語言,庫或平臺,在UTC和本地時間之間進行轉換。而不是搞清楚客戶端時區是什麼,而是依靠客戶端操作系統來執行到當地時間的轉換。大多數環境(包括Web瀏覽器中的JavaScript)都可以從UTC轉換到本地時間,反之亦然。採用這種方法,客戶端和服務器之間只傳輸UTC時間。
而且,你沒有問題問,但在你的標題你提到未來事件。這是一個非常不同的場景,並且通常需要您捕獲本地時間和IANA時區。見this answer for more details。
- 1. Angular - 重複過濾和未來事件
- 2. PHP看過去和預測未來數
- 3. 區分未來事件過去事件使用
- 4. Laravel:防止用戶訪問過去和將來的事件
- 5. 使用JavaScript處理未來和過去的日期和時間日期對象
- 6. 流處理架構:未來事件影響過去的結果
- 7. 如何過濾數據的未來和過去的日期
- 8. MySQL的 - 排序第一的未來事件,則過去的事件
- 9. MySQL:如何爲所有時區選擇UTC偏移量和DST?
- 10. PHP strtotime和DST
- 11. iPhone:NSDate的和DST
- 12. CFAbsoluteTimeGetCurrent和DST
- 13. WatchService:錯過和未處理的事件
- 14. EventLog.EntryWritten事件處理來自過去的事件
- 15. 獲取距離過去和未來最近的實例
- 16. 信用卡MMYY格式未來和過去的日期
- 17. SQL,列出在未來和過去14天內
- 18. 從mysql表中查詢過去和未來的行數
- 19. 如何禁用<p:calendar>中的過去和未來日期?
- 20. PHP時間()和DST問題的端 - DST
- 21. Date對象和UTC方法
- 22. 本地時間到UTC保持DST
- 23. 不斷將ET DST/STD轉換爲UTC
- 24. 歷史時間GMT \ UTC與DST
- 25. 的CouchDB沒有更新鑑於即將到來的和過去的事件
- 26. jQuery的事件:通知過去事件
- 27. 如何處理經常性事件中的DST和TZ?
- 28. jQuery事件處理程序和未聲明的事件對象
- 29. Eventbrite - 獲取過去事件
- 30. 等待過去事件
通常,時間戳存儲爲UTC時間戳+用戶從UTC獲得時間戳後的偏移量。它允許實現各種人類直覺行爲。 –
這就是我的想法,但我以前從未見過一個數據庫,每個日期時間列都有一個相應的偏移列,這使我相信我錯過了一些東西。 –