Android GSON Retrofit将JSON日期字符串序列化为java.util.date

时间:2017-05-02 15:42:12

标签: java android json gson

我对iOS开发相对较新,来自iOS背景。尝试使用Retrofit和GSON将我的JSON响应解析为Date对象。

我试着用这种方式没有运气:Retrofit GSON serialize Date from json string into java.util.date

现在,正如预期的那样,正在收集响应并在它们是正确的字符串时分配对象。但是,当它是日期对象时,会给出以下错误。

  

com.google.gson.JsonSyntaxException:20170502T000000

     

java.text.ParseException:无法解析日期[“20170502T000000']:否   时区指标

我在网上找到了许多不同的类似问题和答案,但似乎没有一个可以解决问题。

JSON响应的MWE

{
    "EventDate": "20170502T000000"
}

JSON反序列化程序类

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

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("yyyyMMdd'T'HHmmss");
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
        try {
            return format.parse(date);
        } catch (ParseException exp) {
            return null;
        }
    }
}

GSON Builder

public static final Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://uat.api.net/")
        .addConverterFactory(GsonConverterFactory.create(
                new GsonBuilder()
                        .registerTypeAdapter(Date.class, new DateDeserializer())
                        .create()
                )
        )
        .build();

我尝试将“Z”或Z添加到日期格式化程序的末尾,但在这种情况下它应该无关紧要,因为JSON中的日期不显示时区。

非常感谢任何帮助

0 个答案:

没有答案