2015-04-24 58 views
1

如何將C#的DateTime格式從gson轉換爲Java日期? 在gson中setDateFormat是否正確? C#gson JsonSyntaxException to Java來自.NET的日期DateTime

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) 
+0

我可以想象您的模式行不通。 'yyyy-MM-dd'T'HH:mm:ss.sZ'或用Java 7'yyyy-MM-dd'T'HH:mm:ss.sX'應該這樣做? – ceekay

+0

我試過了,但它不起作用。 com.google.gson.JsonSyntaxException: '致2015-04-27T09:23:34.982338 + 08:00 在com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:107)' '引起:java.text.ParseException:Unparseable date:「2015-04-27T09:23:34.982338 + 08:00」(at offset 19) at java.text.DateFormat.parse(DateFormat.java:626)' '導致:java.lang.IllegalArgumentException:未知的模式字符'X' 在java.text.SimpleDateFormat.validateFormat(SimpleDateFormat.java:268)' –

+0

好吧,我的錯,你ofc必須提供數字量和使用正確的時間區。 (看我的回答) – ceekay

回答

2

如果你不能與X圖案符號至極的工作是通常用於ISO 8601 time zone你不能照顧此日期格式,因爲時區中的冒號。如果你可以利用它,該模式是這樣的:

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); 

注:由於毫秒和時區的組合,你必須hardset的digitamount

SimpleDateFormat提供了下如GsonDoc中所述。

+0

'yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZ'沒錯!謝謝! –

2

對於DateTime.UtcNow格局不會"yyyy-MM-dd'T'HH:mm:ss.SSS" ,完整的代碼將

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

這在使用Gson時解決了我的問題 – rajeemcariazo