使用 Gson 将 Java 日期转为 MongoDB 日期

标签 java mongodb gson

简介

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

问题

java Date 到 Json Mongo 的转换给出:

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

但是这种格式不符合MongoDB Date。 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"

最佳答案

您可以创建一个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

关于使用 Gson 将 Java 日期转为 MongoDB 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70976757/

相关文章:

java - 带有 JPA : CommandLineRunner finish delayed 的 Spring Boot 2.3

javascript - 不使用 ng-repeat 指令显示对象数组的值

mongodb - 文本分数上的全文搜索过滤器

android - Android Studio 中的 Gson 库

android - GSON 将字符串值转换为 null

java - 在我的java程序中包含gson

java - 使用 GWT 和 Spring Security 的条件 UI?

java - 成功后,步骤无法在 travis-ci 构建中的项目根目录下找到文件

java - 设置 JComboBox PopupMenu 的大小

node.js - 使用javascript删除mongodb中的内部对象