java - Gson java.lang.IllegalArgumentException : No time zone indicator

标签 java android timezone gson datetime-parsing

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

我已经这样创建了

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

我的 json 对象是这样的:
"EpgStartDate" : "2018-08-16T18:00:00" 

但是当我尝试反序列化它时,我收到了这个错误:
ccom.google.gson.JsonSyntaxException: 2018-08-16T06:00:00

caused by: java.text.ParseException: Failed to parse date ["2018-08-16T06:00:00']: No time zone indicator (at offset 0)

Caused by: java.lang.IllegalArgumentException: No time zone indicator

我不明白在哪里放置时区以及如何放置。我在塞尔维亚,所以在哪里,如何以及什么时区。如果有人可以提供帮助,那就太棒了:D

最佳答案

你应该像这样制作反序列化器

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());

关于java - Gson java.lang.IllegalArgumentException : No time zone indicator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51882229/

相关文章:

java - 哪些 Java JSON 库可以很好地重用 JAXB 注释?

java - 通过添加/减去相应的值来合并 map

android - TextView:在省略号后添加文本或更改省略号字符

android - Google Places API 在 recyclerview 上显示照片

java - 对 Excel 中的日期和时间感到困惑

Java 系统时区和 JodaTime

java - 在 Nimbus 中,当鼠标悬停时如何绘制 TextField?

android - FireBaseUI Auth - 如何知道帐户是来自新注册还是现有用户?

jquery - 是否有用于转换时区的 jQuery 函数?

java - MouseEvent.getX() 的 Java.awt.component 的起源