
上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时间,代码如下:

在这里,ISODate是对于UTC时间的包装类。
下面,再看一个稍微复杂的例子,代码如下:


执行上述代码,将会看到输出如下:

可以看到,使用new Date与ISODate的语义是相同的,两者最终都会生成ISODate类型的字段(对应于UTC时间)。而Date与两者都不同,它会以字符串形式返回当前的系统时间。由于当前正处于+8时区(北京标准时间),因此输出的时间值比ISODate多8个小时。
通过typeof操作符可以看到其中的不同,代码如下:
