首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用两种日期格式将Gson转换为Json不起作用。

用两种日期格式将Gson转换为Json不起作用。
EN

Stack Overflow用户
提问于 2016-11-11 11:08:18
回答 3查看 2.2K关注 0票数 2

我有两种来自服务器Json的日期格式。yyyy-MM-dd'T'HH:mm:ssyyyy是我的日期格式。

因此,我尝试用以下代码将这个Json转换为Gson

代码语言:javascript
运行
复制
GsonBuilder gsonBuilder = new GsonBuilder().registerTypeAdapter(Date.class, new DateDeserializer());
Gson gson = gsonBuilder.create();

这是我的约会格式,

代码语言:javascript
运行
复制
private static final String[] DATE_FORMATS = new String[] {
            "yyyy-MM-dd'T'HH:mm:ss",
            "yyyy-MM-dd"
};

private class DateDeserializer implements JsonDeserializer<Date> {

     @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: " + Arrays.toString(DATE_FORMATS));
      }       

}

更新

这是我的Json对象,

代码语言:javascript
运行
复制
{
  "idpatient": 56,
  "diabetesType": null,
  "language": null,
  "customId": "CUS790",
  "diabetesOther": null,
  "firstName": "Niro",
  "lastName": "Wije",
  "email": "sahirml@gmail.com",
  "dob": "1989-10-11",
  "parentEmail": null,
  "gender": "male",
  "diagnosedDate": "2016-11-11",
  "height": 0,
  "weight": 0,
  "heightUnit": null,
  "weightUnit": null,
  "theme": "Lite",
  "userName": "weera",
  "password": "asdf9999",
  "dateCreated": 1478880594000,
  "lastUpdated": 1478880594000
}

然后,我尝试使用以下方法将Json对象转换为Gson对象。我得到了跟踪错误日志。

代码语言:javascript
运行
复制
11-11 16:11:17.735 28072-28072/my.api.example W/System.err: com.google.gson.JsonParseException: Unparseable date: "1478880594000". Supported formats: [yyyy-MM-dd'T'HH:mm:ss, yyyy-MM-dd]
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at my.api.example.activities.LoginActivity$DateDeserializer.deserialize(LoginActivity.java:180)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at my.api.example.activities.LoginActivity$DateDeserializer.deserialize(LoginActivity.java:168)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at com.google.gson.Gson.fromJson(Gson.java:810)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at com.google.gson.Gson.fromJson(Gson.java:775)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at retrofit.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:36)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at retrofit.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:24)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at retrofit.OkHttpCall.parseResponse(OkHttpCall.java:148)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at retrofit.OkHttpCall.access$100(OkHttpCall.java:29)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at retrofit.OkHttpCall$1.onResponse(OkHttpCall.java:94)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:168)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-11 16:11:17.755 28072-28072/my.api.example W/System.err:     at java.lang.Thread.run(Thread.java:841)
11-11 16:11:17.755 28072-28072/my.api.example D/LOGIN_ACTIVITY:  ERROR_MESSAGE Unparseable date: "1478880594000". Supported formats: [yyyy-MM-dd'T'HH:mm:ss, yyyy-MM-dd]

这意味着此方法不适用于我的日期格式。我怎么处理这个异常呢?

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2016-11-11 11:15:00

根据错误,您共享的服务器将以毫秒为单位返回日期,而不是您预期的格式。

com.google.gson.JsonParseException:不可解析日期:"1478880594000“。支持的格式:yyyy‘yyyy:MM:ss,yyyy。

首先您需要转换到日期,然后根据您的需求进行格式转换。

票数 1
EN

Stack Overflow用户

发布于 2016-11-11 12:07:09

更新这一行

代码语言:javascript
运行
复制
return new SimpleDateFormat(format, Locale.US).format(new Date(jsonElement));

希望这能成功。

票数 1
EN

Stack Overflow用户

发布于 2016-11-11 11:11:32

从日志中,我可以看到您不是传递java.util.Date,而是一个时间戳(long),您正在为java.util.Date类注册类型适配器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40546688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档