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常見問題解答
- Ubuntu 常見問題和解答Ubuntu
- Linux常見問題解答Linux
- 大資料儲存:MongoDB實戰指南——常見問題解答大資料MongoDB
- Python程式設計常見問題與解答Python程式設計
- [譯] HTTP/2 常見問題解答HTTP
- RapidWeaver 8常見問題解答API
- 小遊戲引擎常見問題解答遊戲引擎
- 【from MM】Flex 常見問題解答Flex
- vi 命令常見問題解答(轉)
- Windows 98 常見問題解答(轉)Windows
- 解決MongoDB儲存時間時差的問題MongoDB
- Rhinoceros 6 for Mac的常見問題解答ROSMac
- 專案管理常見問題解答(轉)專案管理
- NSIS 之 NsDialogs 常見問題解答
- DNS解析常見問題:域名解析生效原理及時間DNS
- 學習WebFlux時常見的問題WebUX
- 犀牛Rhinoceros 6 for Mac的常見問題解答ROSMac
- 固態硬碟常見問題及其解答分享硬碟
- LINUX 常見問題詳細解答(轉)Linux
- 時區問題導致時間相差8個小時
- WebSphere Application Server 常見問題及解答:開發與部署WebAPPServer
- Screaming Frog SEO Spider常見問題解答IDE
- SOLIDWORKS認證考試常見問題解答Solid
- 域名解析常見問題盤點及解答
- Oracle備份和恢復常見問題解答Oracle
- 關於Apache Hadoop的常見問題解答ApacheHadoop
- WebSphere Application Server 常見問題及解答:安全WebAPPServer
- WebSphere CloudBurst Appliance 常見問題及解答WebCloudAPP
- WinWebMail郵件伺服器 - 常見問題解答WebAI伺服器
- C++語言常見問題解答(3) (轉)
- C++語言常見問題解答(1) (轉)
- Flink Checkpoint超時問題常見排查思路
- 使用代理IP時常見的三大問題
- 編譯Caffe時開啟cudnn常見問題編譯DNN
- 資料結構與演算法常見問題(面試題)不定時更新資料結構演算法面試題