如果您想使用标准的ISO-8601 / RFC 3339日期适配器(您可能会这样做),那么您可以使用内置适配器:
Moshi moshi = new Moshi.Builder()
.add(Date.class, new Rfc3339DateJsonAdapter().nullSafe())
.build();
JsonAdapter dateAdapter = moshi.adapter(Date.class);
assertThat(dateAdapter.fromJson("\"1985-04-12T23:20:50.52Z\""))
.isEqualTo(newDate(1985, 4, 12, 23, 20, 50, 520, 0));
你需要这个Maven依赖来实现这个目的:
com.squareup.moshi
moshi-adapters
1.5.0
如果你想使用自定义格式(你可能没有),那么代码就会更多.编写一个接受日期并将其格式化为字符串的方法,以及另一个接受字符串并将其解析为日期的方法.
Object customDateAdapter = new Object() {
final DateFormat dateFormat;
{
dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
}
@ToJson synchronized String dateToJson(Date d) {
return dateFormat.format(d);
}
@FromJson synchronized Date dateToJson(String s) throws ParseException {
return dateFormat.parse(s);
}
};
Moshi moshi = new Moshi.Builder()
.add(customDateAdapter)
.build();
JsonAdapter dateAdapter = moshi.adapter(Date.class);
assertThat(dateAdapter.fromJson("\"1985-04-12T23:20\""))
.isEqualTo(newDate(1985, 4, 12, 23, 20, 0, 0, 0));
您需要记住使用synchronized,因为SimpleDateFormat不是线程安全的.您还需要为SimpleDateFormat配置时区.