Wenn Sie möchten, dass ein Standard-ISO-8601 verwenden/RFC 3339 Datum Adapter (Sie wahrscheinlich tun), dann können Sie den eingebauten Adapter verwenden:
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));
Sie finden diese Maven benötigen Abhängigkeit um das zu machen:
<dependency>
<groupId>com.squareup.moshi</groupId>
<artifactId>moshi-adapters</artifactId>
<version>1.5.0</version>
</dependency>
Wenn Sie ein benutzerdefiniertes Format verwenden möchten (Sie wahrscheinlich nicht), gibt es mehr Code. Schreiben Sie eine Methode, die ein Datum akzeptiert und formatiert es in eine Zeichenfolge und eine andere Methode, die eine Zeichenfolge akzeptiert und als Datum analysiert.
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));
Sie müssen sich daran erinnern synchronized
weil SimpleDateFormat
zu verwenden ist nicht Thread-sicher. Außerdem müssen Sie eine Zeitzone für die SimpleDateFormat
konfigurieren.
Wird https://github.com/square/moshi/tree/master/adapters/src/main/java/com/squadeup/moshi tun, was Sie wollen? Dieser Adapter wird im Moshi-Adapter-Artefakt veröffentlicht. –