【问题标题】:Spring boot - MongoRepository date conversionSpring boot - MongoRepository 日期转换
【发布时间】:2019-05-11 05:28:53
【问题描述】:

我正在使用 Spring 引导和使用 Spring Data 的 Mongo 存储库。我的 Spring 应用程序默认使用 UTC 时区。当我按日期查询 mongo DB 时,我在 @Query: [...] 'TransactionDate': { $gte: ?4, $lt: ?5 } } 中发送日期如下,并在参数中发送 Java 日期。但是,Mongo 将此 UTC 日期转换为 GMT,尽管它已经是 GMT 并且在返回数据时。它还转换为本地时区,就好像它没有考虑 JVM 时区一样。如何强制 mongo 停止进行转换并了解我已经在 GMT 中发送日期

【问题讨论】:

  • 不,您没有使用 JPA API。那就是 Spring Data MongoDB。完全不同的 API。
  • 它不是 JPA 或存储库,您正在尝试使用普通命令。 jpa 中的 @query 不适用于这种类型的命令,并且可以肯定的是,?4 和 ?5 被认为是 STRING(不是 DATE)

标签: java mongodb spring-boot spring-data-mongodb


【解决方案1】:

Mongo compass 使用本地 PC 时区来转换和显示数据。至于 Java,除了在需要的时区发送 Java 日期外,没有什么可做的。

【讨论】:

  • 此查询不返回任何内容,因为它无法将我们集合中的值与 STRING 输入进行比较
【解决方案2】:
package com.onlinetutorialspoint.SpringBoot_Custom_ErrorPage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.TimeZone;

@SpringBootApplication
public class Application {
  @PostConstruct
  public void init(){
    // Setting Spring Boot SetTimeZone
    TimeZone.setDefault(TimeZone.getTimeZone("IST"));
  }
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

它应该可以解决您的问题。

【讨论】:

  • 我已经在用这个了。当 mongo 存储库打印发送到 mongo 的查询时,它使用以下格式:TransactionDate=Document{{$gte='Thu Nov 29 12:21:39 UTC 2018', $lt='Tue Dec 11 10:20:51 UTC 2018' }}} 这个日期是 GMT 日期,我的服务器是 GMT 但我的电脑是本地时区。因此,在一定程度上,mongo 正在将 2018 年 11 月 29 日星期四 12:21:39 UTC 转换为 GMT 时区,尽管它已经是 GMT ...... Mongo 正在考虑我以本地格式发送我的日期。我如何通知 mongo 我已经在使用 GMT
  • $gte='Thu Nov 29 12:21:39 UTC 2018' 如果这是 GMT 日期,那么为什么它包含 UTC 代码。
  • 即使这样:TransactionDate=Document{{$gte=Thu Nov 29 12:21:39 GMT 2018, $lt=Tue Dec 11 12:47:10 GMT 2018}}}} 不起作用.你能建议吗?就像 Mongo 考虑服务器 PC 本地日期而不是发送给它的日期。例如,是否可以在 Spring Boot 的 mongo URL 配置中发送服务器时区?
  • 我试过 'TransactionDate': { $gte: new Date(?4) [...] } 但它的抛出:调用 init 方法失败;嵌套异常是 com.mongodb.util.JSONParseException
  • 我已经浏览了 mongodb 文档,它说 UTC 时区是 mongo 服务器的默认时区,无论它从客户端获得什么时区日期,它都会将其转换为 UTC,然后将其存储在服务器上ref - click here.. 你将不得不从你的 java 代码中处理它。
猜你喜欢
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2018-02-24
  • 2020-03-10
  • 2016-09-17
  • 2017-12-13
相关资源
最近更新 更多