Gson java.lang.IllegalArgumentException:没有时区指示符

时间:2018-08-16 17:12:20

标签: java android timezone gson datetime-parsing

我在与Gson合作时遇到了奇怪的错误。

我是这样创建的

import stripe

stripe.api_key = "..."
results = []
result = stripe.Refund.list(limit=100)

while len(result["data"]) >= 100:
    last_id = result["data"][99]["id"]
    results.extend(result["data"])

    result = stripe.Refund.list(limit=100, ending_before=last_id)

if len(result["data"]) > 0:
    results.extend(result["data"])

我的json对象是这样的:

mGson = new GsonBuilder().registerTypeAdapter(beelineItemType, new ItemsDeserializer()).setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();

但是当我尝试反序列化时,出现此错误:

"EpgStartDate" : "2018-08-16T18:00:00" 

我不知道在哪里放置时区以及如何放置。我在塞尔维亚,所以在哪里以及如何放置哪个时区。如果有人可以帮助,那将是很棒的:D

1 个答案:

答案 0 :(得分:1)

您应该像这样使反序列化器

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");
      format.setTimeZone(TimeZone.getTimeZone("GMT"));

      try {
          return format.parse(date);
      } catch (ParseException exp) {
          System.err.println(exp.getMessage());
          return null;
      }
   }
}

,然后注册上面的反序列化器:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());