gson JsonSyntaxException to Java Date from .net DateTime

gson JsonSyntaxException to Java Date from .net DateTime

如何将 C# 的 DateTime 格式从 gson 转换为 Java Date? 在 gson 中哪个 setDateFormat 是正确的? C#

DateTime time = DateTime.Now;

JSON

{
  "date_time": "2015-04-24T09:22:08.6964069+08:00"
}

Android

private Date date_time;

Gson gson=  new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create();
gson.fromJson(resultString, objectClass);

E/AndroidRuntime(24671): Caused by: com.google.gson.JsonSyntaxException: 2015-04-24T16:20:08.3672729+08:00
E/AndroidRuntime(24671): Caused by: java.text.ParseException: Unparseable date: "2015-04-24T16:20:08.3672729+08:00"
E/AndroidRuntime(24671): at java.text.DateFormat.parse(DateFormat.java:626)
E/AndroidRuntime(24671): at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:79)

如果您不能使用通常用于 ISO 8601 time zoneX 模式符号,您将无法处理这种日期格式,因为时区中有冒号。如果你可以利用它,模式将如下所示:

yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX

解决方法是将其作为 String 处理,从中删除冒号(例如 replaceAll(String),然后使用 RFC 822 time zone(模式符号 Z):

String time = inputTime.replaceAll("([\+\-]\d\d):(\d\d)",""));
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZ");
Date myDate = format.parse(time);

注意:由于毫秒和时区的结合,您必须硬设置数字量。

SimpleDateFormat provides the underlying conventions, as stated in the GsonDoc.

对于 DateTime.UtcNow,模式将是 "yyyy-MM-dd'T'HH:mm:ss.SSS" ,完整代码将是

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").create();