MongoDB常見問題解答:時間與時區
這期主要來聊一下 MongoDB中的時區問題 。
這個問題雖然簡單,總有同學會問到,集中解答一下。
提出這個問題通常是因為在使用 Mongo Shell 後發現其中展示的時間比中國時間落後8小時而產生的。
比如:插入時間是2021年1月1日00:00:00,在Shell中看到的則是ISODate("2020-12-31T16:00:00Z"),很多人由此產生疑惑, 8小時去哪了? 是不是出錯了?
理解這個問題首先要理解 時區的概念。當你同時向一個身處中國的人和身處美國的人提問現在是幾點時,中國人回答中午12點,美國人回答的卻是凌晨4點。這有區別嗎?他們說錯了嗎?他們都沒錯。他們回答不一樣是因為身處不同的時區,但是他們指代的都是同一個時間: 現在。
也可以說,全世界只有一個時間,只是大家描述它的方式不一樣——根據自己身處的地區。而有個現狀會把這個問題搞得更復雜,那就是 夏令時。
我國現在已經不實施夏令時了(對,過去有過!暴露年齡!),但是世界上有很多國家仍然保留夏令時的習慣。這讓原本複雜的時間表達更加雪上加霜。這在實施同樣的時間規則的人之間不會造成問題。
但是在國際化的今天,你知道一箇中國人跟一個實施了夏令時的德國人約一個會議時間有多難?或者在看到一個德國時間2020年5月7日18點,你知道它是英國時間的幾點嗎?你不光要知道英德的時差,還要知道2020年5月7日這個時間在德國是不是在夏令時的影響範圍內,以及在英國它是不是在夏令時的影響範圍內。現在有沒有覺得小瞧了時間的複雜性?
為了簡化這些複雜的問題,有了UTC (Universal Time Coordinated)時間標準以及表達時間的標準ISO 8601,也就是我們在MongoDB中看到的 ISODate。
ISODate的表示方法簡單來說就是年月日時分秒+時區。 以我們前面的例子來說,身處中國時我們的時區是UTC+8,用ISODate表達則是ISODate("2021-01-01T00:00:00+0800")。這個時間在MongoDB中的表達是ISODate("2020-12-31T16:00:00Z"),其中的Z表示UTC(或者UTC+0)。由於時區的不同導致了表達方式不同,但這兩個時間指代的是同一時刻,所以兩者沒有什麼不一樣。而在展示時,則應該根據你的使用者所處的時區來決定到底顯示哪一個結果。
需要注意的是: 有些語言的驅動(例如Java/C#)在讀取到時間時會自動轉換為伺服器時間,所以不需要再人為轉換。有些語言(例如Python)則不會自動轉換。使用時應該根據你的實際情況決定處理方式。
作者介紹: 張耀星
MongoDB大中華區首席諮詢顧問,供職於MongoDB售後服務團隊5年+,擁有近10年MongoDB使用經驗。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69961190/viewspace-2864552/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Laravel MongoDB 時間區間查詢的問題LaravelMongoDB
- 關於CleanMyMac常見問題與解答Mac
- APatch常見問題解答
- Python程式設計常見問題與解答Python程式設計
- RapidWeaver 8常見問題解答API
- Ubuntu 常見問題和解答Ubuntu
- [譯] HTTP/2 常見問題解答HTTP
- NSIS 之 NsDialogs 常見問題解答
- 解決MongoDB儲存時間時差的問題MongoDB
- Rhinoceros 6 for Mac的常見問題解答ROSMac
- Screaming Frog SEO Spider常見問題解答IDE
- 小遊戲引擎常見問題解答遊戲引擎
- DNS解析常見問題:域名解析生效原理及時間DNS
- 學習WebFlux時常見的問題WebUX
- 犀牛Rhinoceros 6 for Mac的常見問題解答ROSMac
- SOLIDWORKS認證考試常見問題解答Solid
- 業務規則的常見問題解答
- NSDate 時間比較中的時區問題.
- 時區問題導致時間相差8個小時
- Flink Checkpoint超時問題常見排查思路
- GNU GPL 許可證常見問題解答(三)
- 全志RV1108常見問題操作解答
- 域名解析常見問題盤點及解答
- DIY裝機必讀:組裝電腦選購硬體常見問題與誤區解答
- 使用代理IP時常見的三大問題
- SAP document builder一些常見問題的解答UI
- FAQ | PerfDog 常見問題解答第二期
- 資料驅動就一定沒有問題嗎?常見誤區解答
- 資料結構與演算法常見問題(面試題)不定時更新資料結構演算法面試題
- 遊戲開發中不同時區下的時間問題遊戲開發
- 前端入門-day2(常見css問題及解答)前端CSS
- 【答疑】物件儲存OSS常見問題解答(工具類1)物件
- 【FAQ】統一掃碼服務常見問題及解答
- 【等保】二級等保常見問題解答彙總
- 【過等保】2022年過等保常見問題解答
- 時間戳與時間字串的多時區轉換時間戳字串
- 常見的Javascript獲取時間戳JavaScript時間戳
- [20180417]監聽與時區問題.txt