Ela*_*da2 7 java json date simpledateformat gson
我从服务器获取此字符串:
[
{
"title":"spoil the ones u love today",
"startDateTime":"2014-08-10T20:10:36.7158Z"
},
{
"title":"home made patisserie",
"startDateTime":"2014-08-10T20:08:45.0218Z"
}
]
Run Code Online (Sandbox Code Playgroud)
我试着解析它一个对象
public class Offer implements Serializable {
public String title;
public Date startDateTime;
}
Type collectionType = new TypeToken<ArrayList<Offer>>() {}.getType();
mOffersList.addAll((Collection<? extends Offer>) gson.fromJson(result, collectionType));
Run Code Online (Sandbox Code Playgroud)
但是当我将"startDate"定义为Date时
我从gson回来的系列是空的
当我将"startDate"定义为String时
集合正确填充.
我想更改其日期格式.这就是我喜欢将它保存为Date对象的原因.
我试过了
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create;
然而Gson无法解析服务器的字符串
Date startDateTime.没有添加任何东西mOffersList,它保持空白.
我究竟做错了什么?
Vai*_*Raj 17
仅设置所需的DateFormat是不够的.
您需要定义com.google.gson.JsonDeserializer的实现.对于前者
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
return format.parse(date);
} catch (ParseException exp) {
System.err.println("Failed to parse Date:", exp);
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后注册上面的解串器:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
Run Code Online (Sandbox Code Playgroud)