【问题标题】:Insert SQL Date as ISODate in mongodb using Java使用 Java 在 mongodb 中将 SQL 日期作为 ISODate 插入
【发布时间】:2016-06-07 15:44:18
【问题描述】:

我是 MongoDB 新手,我正在从 MSSQL 数据库中读取时间戳,例如 2013-02-15 13:02:16.0002013-02-15 13:02:16,如何将它们作为 ISODate 插入 MangoDB。

我尝试了以下方法,但它不起作用

doc.put(col, new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'", Locale.ENGLISH).parse(value));

查询集合时得到的结果改为字符串

 "DateCreated" : "2012-09-11 19:06:45.0",
 "DateModified" : "2012-09-11 19:06:45.0",

我期待类似的东西

"DateCreated" : ISODate("2012-09-11T19:06:45.xxZ)",
"DateModified" : ISODate("2012-09-11 19:06:45.0"),

【问题讨论】:

  • 你试过用new Date(your_date_var)更新吗?
  • @titi23,是的,我已经尝试过了,但不推荐使用 Date(val)。是这个意思吗?
  • 我以为您使用的是javascript,所以我添加了评论。 new Date() 来自 JavaScript。我不知道如何使用 Java。

标签: java sql-server mongodb


【解决方案1】:

请尝试以下代码。这应该在 Mongo DB 集合中插入日期为 ISODate("2013-02-15T13:02:16.100Z")。

    LocalDateTime ld = LocalDateTime.parse("2013-02-15 13:02:16.100",
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));        
    Date date = Date.from(ld.atZone(ZoneId.systemDefault()).toInstant());   
    doc.put(col, date);

如果需要考虑 ZoneId。请参考以下代码并相应更改区域ID。

Date date = Date.from(ld.atZone(ZoneId.of("UTC")).toInstant());

https://docs.oracle.com/javase/tutorial/datetime/iso/timezones.html

Date date = Date.from(ld.atZone(ZoneId.of("Australia/Darwin")).toInstant());

                America/Caracas     -04:30
               America/St_Johns     -02:30
                  Asia/Calcutta     +05:30
                   Asia/Colombo     +05:30
                     Asia/Kabul     +04:30
                 Asia/Kathmandu     +05:45
                  Asia/Katmandu     +05:45
                   Asia/Kolkata     +05:30
                   Asia/Rangoon     +06:30
                    Asia/Tehran     +04:30
             Australia/Adelaide     +09:30
          Australia/Broken_Hill     +09:30
               Australia/Darwin     +09:30
                Australia/Eucla     +08:45
                  Australia/LHI     +10:30
            Australia/Lord_Howe     +10:30
                Australia/North     +09:30
                Australia/South     +09:30
           Australia/Yancowinna     +09:30
            Canada/Newfoundland     -02:30
                   Indian/Cocos     +06:30
                           Iran     +04:30
                        NZ-CHAT     +12:45
                Pacific/Chatham     +12:45
              Pacific/Marquesas     -09:30
                Pacific/Norfolk     +11:30

【讨论】:

  • 错误答案。不会生成指定的值。在这里应用 JVM 当前的默认时区是不合适的。这样做充电数据的意义。仅应用特定时区,并且仅在您知道该数据来自的上下文的预期时区时才这样做。 JVM 当前的默认时区可能是anything,更糟糕的是,它可以在期间运行时随时更改。
  • 提供答案是为了提供一个想法,将日期存储为 MongoDB 中的 ISODate,因为它是原始问题。如果需要考虑 zoneId,则可以根据需要使用以下代码。日期日期 = Date.from(ld.atZone(ZoneId.of("UTC")).toInstant());区域 ID 链接列表。 docs.oracle.com/javase/tutorial/datetime/iso/timezones.html
猜你喜欢
  • 2016-01-11
  • 2018-12-02
  • 2017-06-19
  • 2014-09-05
  • 1970-01-01
  • 2018-12-19
  • 2017-09-04
  • 1970-01-01
  • 2018-02-22
相关资源
最近更新 更多