Java 与 Gson 的 MongoDB 日期

Java Date to MongoDB date with Gson

简介

我目前正在开展一个项目,该项目定期将多个 java 对象保存到 MongoDB 数据库中。 此对象包含 Date.

问题

将 java 日期转换为 Json Mongo 给出:

new Date() -> "Jan 27, 2022, 2:47:24 AM"

但是这种格式不符合Mongo数据库日期。 MongoDB 被视为字符串而不是日期。

受影响的代码

 public record DatedPuzzle(Date date, Puzzle puzzle) { 
 } 
List<InsertOneModel<Document>> bulkWrites = puzzles.parallelStream() 
         .map(puzzle -> new InsertOneModel<>(Document.parse(gson.toJson(puzzle)))) 
         .toList(); 

问题

如何创建符合Gson序列化的对象?

例如:

new Date() -convert with Gson-> "2022-01-27T01:47:24.000+00:00"

您需要使用 SimpleDateFormatDateTimeFormatter 类 将 Date 从一种表示形式转换为另一种表示形式。

Refer

您可以不直接创建一个 Gson 对象,而是使用 GsonBuilder 并通过一些配置,您将获得所需的结果。

代码:

public static void main(String[] args) {
    Date date = new Date();
    System.out.println(date);

    Gson gson = new GsonBuilder()
            .setDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSXXX")
            .create();

    System.out.println(gson.toJson(date));
}

输出:

Thu Feb 03 23:18:18 EET 2022
"2022-02-03T11:18:18.650+02:00"

更新:

模式的免责声明如下:

  • y 年(例如 122012
  • M 一年中的月份
  • d 一个月中的第几天
  • h 小时,1-12
  • m 一小时,0-59
  • s一分钟秒,0-59
  • S 毫秒为秒,0-999
  • ' 文本分隔符转义
  • X - ISO 8601 时区(-08-0800-08:00

z - 一般时区(太平洋标准时间;PST;GMT-08:00)
Z - RFC 822 时区 (-0800)

添加了一些额外的代码,以便更好地理解 Github 上的输出。
您可以简单地检查那里使用的语言环境:

System.out.println(Locale.getDefault());

在我的机器上是:

en_US