简介
我目前正在开发一个项目,该项目定期将多个 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
年份(例如12
或2012
) -
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/