簡體   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