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"
您需要使用 SimpleDateFormat
或 DateTimeFormatter
类 将 Date 从一种表示形式转换为另一种表示形式。
您可以不直接创建一个 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
简介
我目前正在开展一个项目,该项目定期将多个 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"
您需要使用 SimpleDateFormat
或 DateTimeFormatter
类 将 Date 从一种表示形式转换为另一种表示形式。
您可以不直接创建一个 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