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 zone
的 X
模式符号,您将无法处理这种日期格式,因为时区中有冒号。如果你可以利用它,模式将如下所示:
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();
如何将 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 zone
的 X
模式符号,您将无法处理这种日期格式,因为时区中有冒号。如果你可以利用它,模式将如下所示:
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();