繁体   English   中英

从.net DateTime将gson JsonSyntaxException转换为Java Date

[英]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)","$1$2"));
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZ");
Date myDate = format.parse(time);

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

SimpleDateFormat提供了基础约定,如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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM