我正在使用 Gson 序列化/反序列化我的 pojo,目前正在寻找一种干净的方法来告诉 Gson 将日期属性解析/输出为 unix 时间戳。 这是我的尝试:
Gson gson = new GsonBuilder().setDateFormat("U").create();
来自 PHP,其中“U”是用于将日期序列化/反序列化为 unix 时间戳的日期格式,当运行我的尝试代码时,我是一个 RuntimeException
:
Unknown pattern character 'U'
我假设 Gson 在未定义字母“U”的情况下使用 SimpleDateformat
。
我可以实现自定义 DateTypeAdapter
,但我正在寻找一种更简洁的方法来实现它。只需更改 DateFormat
即可。
最佳答案
创建自定义 TypeAdapter
(UnixTimestampAdapter
) 是可行的方法。
UnixTimestampAdapter
public class UnixTimestampAdapter extends TypeAdapter<Date> {
@Override
public void write(JsonWriter out, Date value) throws IOException {
if (value == null) {
out.nullValue();
return;
}
out.value(value.getTime() / 1000);
}
@Override
public Date read(JsonReader in) throws IOException {
if (in.peek() == JsonToken.NULL) {
in.nextNull();
return null;
}
return new Date(in.nextLong() * 1000);
}
}
现在,您必须选择(取决于您的用例):
1 - 如果您想在所有日期字段上应用此序列化,则在创建 Gson
实例时注册 UnixTimestampAdapter
:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new UnixTimestampAdapter())
.create();
2 - 如果您希望它仅应用于某些特定字段,或者使用 @JsonAdapter
注释您的日期字段(如 @Marcono1234 所建议)。
class Person {
@JsonAdapter(UnixTimestampAdapter.class)
private Date birthday;
}
关于java - 用于序列化/反序列化 unix 时间戳的 Gson 日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348055/