![MongoDB进阶与实战:微服务整合、性能优化、架构管理](https://wfqqreader-1252317822.image.myqcloud.com/cover/697/38209697/b_38209697.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.2 使用日期
MongoDB中的日期使用Date类型表示,在其内部实现中采用了一个64位长的整数,该整数代表的是自1970年1月1日零点时刻(UTC)以来所经过的毫秒数。Date类型的数值范围非常大,可以表示上下2.9亿年的时间范围,负值则表示1970年之前的时间。
这种方式比较常见,比如Java中的System.currentTimeMillis方法也是这么计算的。
在使用日期类型时,通常需要注意时区的问题。MongoDB的日期类型使用UTC(Coordinated Universal Time)进行存储,也就是+0时区的时间。一般客户端会根据本地时区自动转换为UTC时间,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_55_2.jpg?sign=1739267717-Mj3KL9gdlpQCThgS9Wl8ynRXn6EkXBCe-0-2139ab594b6a10e981eed9dc7a5ebddc)
在这里,ISODate是对于UTC时间的包装类。
下面,再看一个稍微复杂的例子,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_55_3.jpg?sign=1739267717-OYb72VfIYYEdlpaDXGGrgBMGl0XZWnSW-0-06eaa1116e6c96f8aaf5a0e79a3e5bb2)
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_56_1.jpg?sign=1739267717-0sXwtZdPP8jTpHJhwhW5n32na4jhYcWv-0-a35a2f5ffaf9e3d638b1d202486894b8)
执行上述代码,将会看到输出如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_56_2.jpg?sign=1739267717-vbPFWz1sJHKMRLrzrPBSpOXlGuEexAU8-0-784220928ba1f6d3ab3b2b31f9fedfad)
可以看到,使用new Date与ISODate的语义是相同的,两者最终都会生成ISODate类型的字段(对应于UTC时间)。而Date与两者都不同,它会以字符串形式返回当前的系统时间。由于当前正处于+8时区(北京标准时间),因此输出的时间值比ISODate多8个小时。
通过typeof操作符可以看到其中的不同,代码如下:
![](https://epubservercos.yuewen.com/6F449D/20118171608699906/epubprivate/OEBPS/Images/40827_56_3.jpg?sign=1739267717-7OWlN9p0zTsQZfieMSYZ4rLZvY5Pkvzq-0-5ec112a1dcd4cb87ef93c376febfe49e)