我实际上是通过tLibraryLoad组件使用mongDB API,因为我发现使用tJavaRow和tJava组件比使用MongoDB调色板组件更容易构建复杂的多级文档。
我正在读取来自Oracle的数据,这些数据是具有零时间戳组件的日期值:例如:
29-JUN-08 00.00.00
导入通过Talend工作,但是mongo shell中的记录似乎是前一天。您可以看到记录插入为28-JUN-2008。
从mongoDB中的JSON文档中提取:
" status_date" :ISODate(" 2008-06-28T23:00:00Z")
几乎就像mongoDB(或Talend?)将午夜日期视为前一天的结束,而不是2008年6月29日的开始。
在我的Talend模式中,我已将Oracle列指定为Date类型,并且DB类型为Date。
任何建议表示赞赏。
---更新1 ------ 由于只有一些日期受到影响,似乎这是mongoDB中的DST调整,可能会将显示调整为我当地的时区,因为受影响的日期在夏令时的后半段。
是否因为mongo shell的位置而调整日期?
由于mongo服务器的位置,它正在调整日期,所以使用mongo shell的所有人都会得到相同的日期查询答案?
不同的人在日期上运行不同的mongo查询会根据他们的位置得到不同的结果,他们的DST启动日期...即。你可以想象2015年11月1日的日期,被计算为10月31日的数字(23:00)......
我
答案 0 :(得分:1)
我感觉到你的痛苦 - 这是来自MongoDB本身。
问题在于MongoDB默认以UTC格式存储日期。
https://docs.mongodb.org/manual/tutorial/model-time-data/
您可以使用上面的Mongo建议,但在这种情况下,您只存储日期而不是时间。我使用了两种解决方案:
......或......
在Linux上,您可以看到utc值的用途:
date -u
我想您可以将计算机上的本地时区更改为UTC时间,看看会发生什么。
就个人而言,我从未遇到过使用第一种方法的问题。这很快,并确保我有我想要的东西。
答案 1 :(得分:0)
我认为这是因为服务器的时区。尝试从日期对象中删除时区,然后将其插入mongodb。
使用moment.js,你可以用这样的方式创建没有时区的日期:
var date = moment.utc("29-JUN-08 00.00.00", 'DD-MM-YYYY h.mm.s').format()