转载自:http://www.cnblogs.com/yuechaotian/archive/2013/02/02/2889824.html

当通过mongo shell来插入日期类型数据时,使用new Date()和使用Date()是不一样的:

> db.tianyc04.insert({mark:1, mark_time:new Date()})
> db.tianyc04.insert({mark:2, mark_time:Date()})
> db.tianyc04.find()

{ "_id" : ObjectId("5126e00939899c4cf3805f9b"), "mark" : 1, "mark_time" : ISODate("2013-02-22T03:03:37.312Z") }
{ "_id" : ObjectId("5126e00c39899c4cf3805f9c"), "mark" : 2, "mark_time" : "Fri Feb 22 2013 11:03:40 GMT+0800" }

>

我们看:使用new Date(),插入的是一个isodate类型;而使用Date()插入的是一个字符串类型。

那isodate是什么日期类型的?我们看这2个值,它比字符串大概少了8小时。这是由于mongo中的date类型以UTC(Coordinated Universal Time)存储,就等于GMT(格林尼治标准时)时间。而我当前所处的是+8区,所以mongo shell会将当前的GMT+0800时间减去8,存储成GMT时间。

如果通过get函数来获取,那么mongo会自动转换成当前时区的时间:

> db.tianyc04.findOne({mark:1})
{
"_id" : ObjectId("5126e00939899c4cf3805f9b"),
"mark" : 1,
"mark_time" : ISODate("2013-02-22T03:03:37.312Z")
}
> db.tianyc04.findOne({mark:1}).mark_time
ISODate("2013-02-22T03:03:37.312Z")
> x=db.tianyc04.findOne({mark:1}).mark_time
ISODate("2013-02-22T03:03:37.312Z")
> x
ISODate("2013-02-22T03:03:37.312Z")
> x.getFullYear()
2013
> x.getMonth() # js中的月份是从0开始的(0-11)
1
> x.getMonth()+1
2
> x.getDate()
22
> x.getHours() #注意这里获取到的小时是11,而不是3
11
> x.getMinutes()
3
> x.getSeconds()
37

ISO的日期类型可以直接使用new Date来进行比较,直接使用+8后的时间即可(注意字符串使用“/”分隔符):

> db.tianyc04.find({mark_time:{$gt: new Date('2013/02/22 11:03:37')}})
{ "_id" : ObjectId("5126e00939899c4cf3805f9b"), "mark" : 1, "mark_time" : ISODate("2013-02-22T03:03:37.312Z") }
> db.tianyc04.find({mark_time:{$lt: new Date('2013/02/22 11:03:37')}})
> db.tianyc04.find({mark_time:{$lt: new Date('2013/02/22 11:03:38')}})
{ "_id" : ObjectId("5126e00939899c4cf3805f9b"), "mark" : 1, "mark_time" : ISODate("2013-02-22T03:03:37.312Z") }
> db.tianyc04.find({mark_time:{$gt: new Date('2013/02/22 11:03:37'), $lt: new Date('2013/02/22 11:03:38')}})
{ "_id" : ObjectId("5126e00939899c4cf3805f9b"), "mark" : 1, "mark_time" : ISODate("2013-02-22T03:03:37.312Z") }

那么,如果使用python来读取isodate类型的数据,会自动转化为GMT+0800时间吗?我继续测试:

> exit
bye

C:\>python
'import site' failed; use -v for traceback
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Int
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymongo
>>> conn=pymongo.Connection('10.0.0.35',20000)
>>> db=conn.test
>>> tianyc04=db.tianyc04.find()
#我们看,从python取出来的也是一个日期类型,一个字符串类型
>>> print tianyc04[0]
{u'mark_time': datetime.datetime(2013, 2, 2, 1, 52, 12, 281000), u'_id': ObjectId('510c714c045d7d8d7b6ec1bb'), u'mark': 1.0}
>>> print tianyc04[1]
{u'mark_time': u'Sat Feb 02 2013 09:52:17 GMT+0800', u'_id': ObjectId('510c7151045d7d8d7b6ec1bc'), u'mark': 1.0}
#我打印出mongo的isodate类型,发现并没有自动转换为GMT+0800时间:
>>> print tianyc04[0]['mark_time']
2013-02-02 01:52:12.281000
>>> print tianyc04[1]['mark_time']
Sat Feb 02 2013 09:52:17 GMT+0800

MongoDB——ISODate日期类型相关推荐

  1. mongodb更新日期类型为常用的格式

    proface 项目中使用到了mongodb,通过客户端导入到mongodb后,日期类型的数据格式就乱了,因为从数据库导出的csv后2020-01-01 10:54:12这种格式的数据就变为了2020 ...

  2. pymongo 日期类型

    mongo中的日期类型,使用ISO格式,例如:ISODate("2012-11-02T07:58:51.718Z").下面来测试一下: C:\>mongo 127.0.0.1 ...

  3. 【MongoDB】BSON类型

    目录 一.ObjectId 二.字符串(String) 三.时间戳(Timestamps) 四.日期(Date) BSON是一种二进制序列化格式,用于在MongoDB中存储文档和进行远程过程调用. 有 ...

  4. 解决:sql中将日期字符串当做日期类型处理

    敲机房中看着同期的人的博客,学习存储过程的使用,在查询记录和金额查询这里,拥有共同的窗体,所以自己就使用了模板方法+存储过程!查询日期的过程让我遇到了问题. 在实体中声明了3个字段,分别是数据表,起始 ...

  5. SQLite 日期类型(转)

    SQLite日期类型 简单示例: SELECT     datetime(CHANGE_DATE,'localtime'),     strftime('%Y-%m-%d',CHANGE_DATE,' ...

  6. R字符串(Strings)转为日期类型(Dates)

    R字符串(Strings)转为日期类型(Dates) 目录 R字符串(Strings)转为日期类型(Dates) as.Date函数

  7. JavaScript 把字符串类型转换成日期类型

    今天在写习题时,遇到些小问题,在这里把答案分享给大家,希望能帮助到大家! 一.把字符串转换成日期类型 1 var str = "1997-3-12"; 2 var d = new ...

  8. FieldGroup绑定的日期类型存储格式的问题

    问题 日期存储的时候,当前数据库中存储格式为 "2017-9-5 0:00:00", 而我实现了以后,看到数据库的存储格式为 "Mon Sep 04 00:00:00 C ...

  9. 日期类型存储成字符串类型的格式问题

    问题 ConversionException: Could not convert '2017-8-28 0:00:00' to java.util.Date at com.vaadin.data.u ...

最新文章

  1. java 递归生成格雷码_格雷码的递归生成
  2. 如何修改Linux命令提示符
  3. LeapFTP 注册码
  4. 法律专业计算机基础试卷答案,大学计算机基础试题及答案
  5. 计算机网络解释概念,2017年计算机三级网络技术基本概念与名词解释:计算机网络的基本概念...
  6. 介绍当前流行的一些开源Flash视频播放器
  7. javascript读取用户名和计算机名
  8. file 创建 txt文件
  9. POJ2074 Line of Sight
  10. 按顺序取html中多个输入框的值,JS获得多个同name的input输入框的值的实现方法
  11. 【系统分析师之路】2019年上系统分析师综合知识真题
  12. 开发悬浮球SDK之自定义view 下篇 — 裁剪圆形(以及其他形状)背景图片并设置文字
  13. 金士顿服务器内存条怎么看型号,【查看内存条参数】 内存条上的参数怎么看...
  14. java解四元一次方程
  15. Rockchip开发系列 - 3.Pin-Ctrl 开发指南
  16. 洞察科技,感知未来:人工智能将如何改变学术搜索?
  17. 第十九周学习周报(20180709-20180715)
  18. 视觉SLAM--直接法
  19. veriog中的latch问题
  20. c++求矩阵的秩_对于向量和矩阵的理解

热门文章

  1. vue循环后不能下滑_Vue 循环后的数据更改无法响应。
  2. Spring资源抽象Resource
  3. 详解pytorch动态量化
  4. 抖音推荐算法!(教你如何上热门)
  5. 模仿人类逻辑,首个BERT模型AI通过初二科学考试!研究人员:完成了老板遗愿
  6. mac 卸载php版本,mac osx 更改自带php版本
  7. PhalAPI学习笔记拓展篇 ———ADM模式中NotORM实现简单CURD
  8. 项目实践--广告排期系统
  9. 使用vi编辑器创建文本文件
  10. 如何利用Simulink来设计一个AEB的算法,并通过SCANeR仿真来测试?