- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
问题在 MongoDB 中将字符串解析为日期时,推荐的实现是什么?
我问这个是因为我们有供应商以“2017-01-01”和“2017/01/01”的格式向我们发送日期的字符串表示形式。我原以为使用 Date() 和 ISODate() 在 MongoDB 中解析这些不同的字符串会返回相同的结果。
给定以下通过 MongoChef 针对 MongoDB 3.4 运行的示例
1. print(new Date("2016-01-01"))
2. print(new Date("2016/01/01"))
3. print(new ISODate("2016-01-01"))
4. print(new ISODate("2016/01/01"))
产生以下结果
1. Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time)
2. Fri Jan 01 2016 00:00:00 GMT-0600 (Central Standard Time)
3. Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time)
4. 2017-01-06T10:34:01.814-0600 E QUERY [thread1] Error: invalid ISO date
这对我来说没有任何意义。任何可以向我解释这一点的人将不胜感激。
我可以接受的选项是选项 #2,因此我确保我们的日期都用“/”分隔,并使用新的 Date() 构造函数。
最佳答案
“2017-01-01”
和 “2017/01/01”
。简而言之,第一个是 ISO 格式,因此它将解析为 UTC 时间,第二个是非 ISO 格式,将解析为本地时区的时间。
考虑 Mongo shell 中的输出。所有时间均以 UTC 时间显示。
1.new Date("2016-01-01") ---- ISODate("2016-01-01T00:00:00Z")
2.new Date("2016/01/01") ---- ISODate("2016-01-01T06:00:00Z")
3.new ISODate("2016-01-01") ---- ISODate("2016-01-01T00:00:00Z")
4.new ISODate("2016/01/01") ----2017-01-06T11:14:56.862-0600 E QUERY [thread1] Error: invalid ISO date :
Mongo 数据库以 UTC 时间保存所有日期。
Mongo Chef 将以上所有保存的 UTC 日期时间值转换为本地时区(-06:00 偏移),仅用于显示目的。
所以选择在 ISODate("2016-01-01T00:00:00Z")
和 ISODate("2016-01-01T06:00:00Z")
.
两者都是 UTC 日期时间。看起来您只对日期部分感兴趣(时间部分设置为午夜),选项 2 (new Date("2016/01/01") ---- ISODate("2016-01-01T06: 00:00Z")
) 将是您的选择,只要您以与保存时相同的方式创建日期,所有比较查询都可以正常工作。
引用:
https://docs.mongodb.com/manual/reference/bson-types/#document-bson-type-date
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
关于MongoDB 日期和 ISODate 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41510633/
我的应用程序生成 JSON 格式的日志。日志看起来像这样: {"LogLevel":"error","Datetime":"2013-06-21T11:20:17Z","Module":"DB","M
我正在编写一个 RScript 来将当前系统时间戳与 MongoDB 最后更新的时间戳进行比较。我的做法: db.runs.find().sort({'id':-1}).limit(1) - 给出最后
如何将字符串 "2015-02-02" 转换为 ISODate 2015-02-02T00:00:00.000Z?我试图找到一些例子,但没有找到。 最佳答案 您可以为此使用常规的 Javascript
我试图将正则表达式过滤器(年)应用于日期类型字段,但查询未返回任何结果。那么是不是试图了解此查询的行为? db.collection.find({"ReportedDate":/2016/i}) 注意
我正在执行测试以确保我正确获取日期。 我当前的测试是:选择 mongodb ISODate 格式的日期并将其转换为数值(自 1970 年以来的毫秒数),反之亦然 示例: var date_test =
我正在使用 MongoCursor 迭代集合并检索changeDate(ISODate 格式)。但是,使用 mongocursor 会以不同的格式返回数据。是否可以检索 ISODate 格式的chan
是否可以计算文档中两个日期之间的差异服务器端,并对其进行查询? (如SQL的DATEDIFF函数) 假设我有很多这样的文档: >>> db.collection.find() [ { "id"
我需要返回集合中每个用户的最小 client_timestamp 值,但是我无法让 $min 运算符以这种方式运行。有没有办法让查询返回集合中所有 user_ids 的最小 client_timest
我正在寻找来自 qt 的日期时间,以将字符串作为 isodate 但带有时区返回给我。我有时会在网上查看我的问题,但没有找到解决方案 我刚刚得到这个: this->ui.dateEnd->dateTi
为什么最后两个语句返回false? test:PRIMARY> a = new ISODate(); b = a; ISODate("2014-08-21T19:48:12.963Z") test:P
问题在 MongoDB 中将字符串解析为日期时,推荐的实现是什么? 我问这个是因为我们有供应商以“2017-01-01”和“2017/01/01”的格式向我们发送日期的字符串表示形式。我原以为使用 D
在集合中,我存储了这种文档: { "_id" : ObjectId("55e8a5cba21b9e051eb448d1"), "created_at" : "2015-01-01T00
我正在尝试使用 nodejs/mongoose 从 mongodb 获取结果。 var dateStr = new Date(year,month,day,0,0,0); var nextDate =
我正在尝试按小时聚合 MongoDB 集合中的记录,并且需要将存储为时间戳(毫秒)的日期转换为 ISODate,以便我可以使用聚合框架的内置日期运算符($hour、$month 等) 记录存储为 {
我正在尝试运行这个: mongoexport.exe -h *MYHOST* -p *MYPORT* -q "{'time':{'$gte': ISODate('2014-12-21 12:57:00
我似乎无法在 MongoDB 中使用最基本的日期查询。文档看起来像这样: { "_id" : "foobar/201310", "ap" : "foobar", "dt" :
我无法在 python 中导入 rdflib。错误详细信息: Python 2.7.3 (default, Jun 27 2012, 23:48:21) [GCC 4.6.1] on linux2 T
有谁知道一种更简洁的方法来将时区包含在 QDateTime 的 ISO 字符串表示中? 我应该可以使用以下内容: qDebug() #include int main(int argc, int
我有一个适用于 mongodb shell 的简单查询: db.collection.find({"date": {$lt: ISODate("2015-11-03T00:00:00Z")} }) 非
我从 ISODate 对象的 MongoDb 接口(interface)中丢失了纳秒。当我在 perl 中读取它们时,所有纳秒都设置为零。 首先是我的环境: MongoDB version: 1.8.
我是一名优秀的程序员,十分优秀!