Możesz to łatwo zrobić, ustawiając niestandardowy GsonConverter za pomocą własnego obiektu Gson w instancji modernizacji. W swoim POJO można Date created_at;
zamiast długiego lub ciąg. Od obiektu daty można użyć numeru created_at.getTime()
, aby uzyskać długo, gdy jest to konieczne.
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssz")
.create();
RestAdapter.Builder builder = new RestAdapter.Builder();
// Use a custom GSON converter
builder.setConverter(new GsonConverter(gson));
..... create retrofit service.
Można również obsługiwać wiele formatów Data ciągów rejestrując zwyczaj JsonDeserializer
na gson przykład używany przez modernizacji
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateTypeDeserializer());
public class DateTypeDeserializer implements JsonDeserializer<Date> {
private static final String[] DATE_FORMATS = new String[]{
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd",
"EEE MMM dd HH:mm:ss z yyyy",
"HH:mm:ss",
"MM/dd/yyyy HH:mm:ss aaa",
"yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
"yyyy-MM-dd'T'HH:mm:ss.SSSSSSS",
"yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'",
"MMM d',' yyyy H:mm:ss a"
};
@Override
public Date deserialize(JsonElement jsonElement, Type typeOF, JsonDeserializationContext context) throws JsonParseException {
for (String format : DATE_FORMATS) {
try {
return new SimpleDateFormat(format, Locale.US).parse(jsonElement.getAsString());
} catch (ParseException e) {
}
}
throw new JsonParseException("Unparseable date: \"" + jsonElement.getAsString()
+ "\". Supported formats: \n" + Arrays.toString(DATE_FORMATS));
}
}
można użyć konwertera Typ niestandardowy (ale nie wiem jak po prostu ograniczyć jeden z nich do konkretnego pola zamiast całego typu) – njzk2
na marginesie, to 'Z' wygląda st zasięg. Założę się o problem z formatowaniem po stronie serwera. – njzk2
"Z" proste oznacza, że nie ma przesunięcia od UTC - więcej informacji z [wikipedia] (http://en.wikipedia.org/wiki/ISO_8601#UTC) –