首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Oracle导入MongoDB日期到1天

从Oracle导入MongoDB日期到1天
EN

Stack Overflow用户
提问于 2016-01-06 18:11:43
回答 2查看 690关注 0票数 0

我实际上是通过一个mongDB组件使用tLibraryLoad API,因为我发现使用tJavaRow和tJava组件构建复杂的多层次文档比使用MongoDB调色板组件更容易。

我从Oracle读取数据,这些数据是带有零时间戳组件的日期值:例如:

29-6月-08 00.00.00

导入是通过Talend完成的,但是mongo中的记录似乎是前一天。您可以看到,该记录是插入的28-6月-2008年。

从mongoDB中的JSON文档中提取:

"status_date“:ISODate("2008-06-28T23:00:00Z")

几乎就像mongoDB (或者Talend?)将午夜日期视为前一天的尾声,而不是2008年6月29日的开始。

在我的Talend架构中,我也将Oracle列指定为日期类型,并使用DB类型。

任何建议都很感激。

更新1--由于只有一些日期受到影响,这似乎是mongoDB中的DST调整,可能是将显示调整到我的本地时区,因为受影响的日期在夏令时的下半年。

是因为芒果壳的位置而调整日期吗?

由于mongo服务器的位置,所以所有使用mongo的人都会得到相同的日期查询答案。

不同的人在日期上运行不同的mongo查询会根据他们的位置得到不同的结果,他们的DST会在日期中启动吗?你可以想象从2015年11月1日开始,被算作10月31日数字的贡献(在23:00).

EN

回答 2

Stack Overflow用户

发布于 2016-01-06 19:11:43

我感觉到你的痛苦--这是从MongoDB本身衍生出来的。

问题在于,默认情况下,MongoDB以UTC格式存储日期。

https://docs.mongodb.org/manual/tutorial/model-time-data/

您可以使用Mongo的上述建议,但在这种情况下,您只是存储日期,而不是时间。我使用了两种解决方案:

  1. 不要把日期作为日期来存储。将所有日期转换为%Y%m%d格式,并将其存储为整数。您可以使用$gt和$lte轻松地比较使用整数的日期--只需确保使用相同格式的日期并在稍后的程序中将它们转换回来。

..。或者..。

  1. 由于在您的情况下,您的日期似乎是一个小时后,添加一个小时,然后再插入。这完全取决于时区偏移到本地机器的时间长短。

在linux上,您可以看到utc值使用的是什么:

代码语言:javascript
复制
date -u

我想您可以将机器上的本地时区更改为UTC时间,看看会发生什么。

就我个人而言,我从来没有遇到过使用第一种方法的问题。它很快,并确保我有我想要的在那里。

票数 1
EN

Stack Overflow用户

发布于 2016-01-06 18:37:31

我认为这是因为您的服务器的时区。尝试从date对象中移除时区,然后将其插入mongodb。

使用moment.js,您可以以这样的方式创建没有时区的日期:

代码语言:javascript
复制
var date = moment.utc("29-JUN-08 00.00.00", 'DD-MM-YYYY h.mm.s').format()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34639865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档