Если вы хотите использовать стандартный адаптер даты ISO-8601/RFC 3339 (вероятно, так оно и есть), вы можете использовать встроенный адаптер:
Moshi moshi = new Moshi.Builder()
.add(Date.class, new Rfc3339DateJsonAdapter().nullSafe())
.build();
JsonAdapter<Date> 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, чтобы сделать эту работу:
<dependency>
<groupId>com.squareup.moshi</groupId>
<artifactId>moshi-adapters</artifactId>
<version>1.5.0</version>
</dependency>
Если вы хотите использовать пользовательский формат (вероятно, вы этого не сделаете), есть еще код. Напишите метод, который принимает дату и форматирует ее в строку, и другой метод, который принимает строку и анализирует ее как дату.
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<Date> 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
.
person
Jesse Wilson
schedule
10.06.2017