2011-07-09 16 views
0

我有一個JSON對象返回到我的應用程序包含日期的Java,日期從單獨的JSON值的字符串到日期

date": { 
"year": 2011, 
"month": 5, 
"dayOfMonth": 30, 
"hourOfDay": 16, 
"minute": 13, 
"second": 47 
}, 

我需要用這個日期,並將其存儲在SQL數據庫中,最可能作爲一個字符串,所以我解析這個日期對象使用Java中的JSON函數

這裏我試圖格式化整個部分作爲一個字符串之間的日期和小時分鐘秒之間的冒號。希望我能與SimpleDateFormat的解析它,但失敗parserexceptionerror

dataObj.getJSONObject("dateObject").getString("year") + "-" + 
dataObj.getJSONObject("dateObject").getString("month") + "-" + 
dataObj.getJSONObject("dateObject").getString("dayOfMonth") + " " + 
dataObj.getJSONObject("dateObject").getString("hourOfDay") + ":" + 
dataObj.getJSONObject("dateObject").getString("minute") + ":" + 
dataObj.getJSONObject("dateObject").getString("second"); 

什麼會去了解這一點的最好方法是什麼?

我需要把JSON字符串合併成一個可讀的日期,理想情況下我可以變成一個字符串。這可以是格式化的日期 - 例如simpledateformat將會執行的操作,也可以是毫秒。

洞察讚賞

+0

我確定可以指定一個日期格式來從一個String(從傳入的JSON的不同部分構建)轉換爲一個java.util.Date實例。你試過什麼日期格式? –

+0

請注意,在JSON處理示例中,可能會用JSONObject dateJson = dataObj.getJSONObject(「dateObject」); dateJson.getString(「year」)+「 - 」+等。這可能會提高性能,這可能無關緊要。它還有助於代碼更易於維護,因爲任何小的相關更改都不需要進行六次,而只需要一次。 –

回答

1

假設目標是轉變的日期信息的字符串表示,格式化例如爲「16點13分47秒2011-5-30」,變成java.util.Date實例...

String dateString = "2011-5-30 16:13:47"; 
Date date = new SimpleDateFormat("yyyy-M-dd HH:mm:ss").parse(dateString); 
System.out.println(date); 
// output: Mon May 30 16:13:47 MST 2011 

String dateString2 = "2011-11-3 16:13:47"; 
Date date2 = new SimpleDateFormat("yyyy-M-dd HH:mm:ss").parse(dateString2); 
System.out.println(date2); 
// output: Thu Nov 03 16:13:47 MST 2011 

的另一種方法是將所有JSON輸入值轉換爲Java ints,然後使用Calendar.getInstance().set(year + 1900, month, date, hrs, min, sec).getTime()

+0

這對我很有用,非常靈活。我使用了錯誤的「SimpleDateFormat」種子。我將格式固定到您的'「yyyy-M-dd HH:mm:ss」',您可能從查看字符串中獲得該格式,並且我停止瞭解析器異常! – CQM

1

如果你還沒有,你應該看看JSON庫,使JSON序列化和反序列化要容易得多。 Jackson和Google的GSON都很好。

JSON庫知道如何將日期JSON字符串讀取到java.util.Date對象中。然後,您可以將其存儲在日期時間列中的數據庫中。將日期作爲適當的日期時間數據類型存儲在數據庫中的優點是,您可以更輕鬆地構建查詢 - 例如,如果您需要選擇兩個日期之間的所有記錄。如果這是一個字符串列,你的查詢將很快變得醜陋。關於日期時間的另一件事是它存儲在一個固定長度的列中(在許多數據庫實現中存儲了毫秒的值),所以存儲效率很高。如果您開始對完整的SimpleDateFormat-ed字符串中的所有字符進行計數,則以字符串形式存儲容易佔用更多空間。因此,在日期時間上構建索引變得更有效率,可以在不同長度的字符串列上構建索引。

+0

內容豐富,但是我的JSON對象標題爲'date'已經是JSON函數可以讀取爲日期對象的格式嗎?我目前服從這個對象是如何返回給我的 – CQM

+0

您發佈的JSON不是任何標準的日期格式。您可能必須創建自己的模型對象MyDate,其中包含字段年,日,月等等。 GSON將能夠將您的JSON字符串轉換爲該對象的一個​​實例。然後,您的模型對象可以有一個方便的方法,從它的字段中構建一個java日曆/日期對象,讓您的生活變得更輕鬆。 –

+0

Gson或Jackson或任何其他JSON處理API中沒有任何東西可以讓我們更容易地將轉換爲java.util.Date。這樣的API只是使得從JSON序列化/反序列化Java更加方便。 –