美文网首页
MongoDB常见问题解答:时间与时区

MongoDB常见问题解答:时间与时区

作者: MongoDB中文社区 | 来源:发表于2022-03-04 12:11 被阅读0次

这期主要来聊一下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使用经验。

相关文章

  • MongoDB常见问题解答:时间与时区

    这期主要来聊一下MongoDB中的时区问题。 这个问题虽然简单,总有同学会问到,集中解答一下。 提出这个问题通常是...

  • MongoDB时间少8小时

    MongoDB自带的Date,时间是UTC的时间,和咱们中国时区少8个小时。MongoDB中的Date类型数据只保...

  • PHP基础 —— 日期与时间

    日期与时间 PHP文档 : 日期与时间 设置时区 默认时区是UTC 文档中的 时区列表,使用时进行参照 设置时区 ...

  • angular常见问题解答

    angular常见问题解答 -------------------------------------------...

  • 修改Linux时区与时间

    查看、修改Linux时区与时间 linux时区的查看与修改 查看当前时区date -Rimage.png 修改设置...

  • 时区与时间

    时区 由于世界各国家与地区经度不同,地方时也有所不同,因此会划分为不同的时区。有关国际会议决定将地球表面按经...

  • 时间与时区

    其实我一直都搞不懂Java中的时区是怎么计算的,后来看了一下源代码发现好简单啊。。。当我们执行new Date()...

  • 时区那些事儿

    为什么会有时区?一共有多少个时区?时区与时间的关系?哪个时区的时间更快一些?东十二区和西十二区是不是同一个时区?东...

  • MongoDB 聚合 $dateToString 时差问题解决

    存储在MongoDB中的时间是标准时间UTC +0:00,而中国时区是+8.00 由于时差的存在在使用聚合函数$d...

  • 海外义工Q&A(第一期)

    更多关于项目常见问题解答 (安全、消费、接机、机票等问题) 【项目的开展时间】 泰国、斯里兰卡活动时间为2016年...

网友评论

      本文标题:MongoDB常见问题解答:时间与时区

      本文链接:https://www.haomeiwen.com/subject/skzprrtx.html