2012-12-09 81 views
2

我收到下面的JSON,我可以通過描述和日期解析。我一直試圖解析整個時間,但是我所嘗試的一切都會讓我輸出糟糕的結果。從json解析時間。具體格式

時間對象應該說5:30,但我不知道我是否能夠通過該格式解析。我認爲這是public String format3339 (boolean allDay) 我已經發布了JSON輸入,我的JSON解析和輸出。

輸入

{"object":[{"description":"blah blah blah","date":"2012-12-11","time":"2000-01-01T05:30:00Z"}]} 

主要是我擔心的"time":"2000-01-01T05:30:00Z"

解析

JSONArray arr = null; 
list = new ArrayList<HashMap<String, String>>(); 
} 
for (int i = 0; i < arr.length(); i++) { 
    JSONObject d = arr.getJSONObject(i); 
    Time time = new Time(); 
    String etime = d.getString(TIME_TAG); 
    String description = d.getString(DESCRIPTION_TAG); 
    String date = d.getString(DATE_TAG); 
      //************************************************************************ 
      //********I suspect that i might be converting the time object incorrectly but whatever 
      //********i put here either does not work or gives me bad output. 
    Boolean mtime = time.parse3339(etime); 
    if (mtime == true) { 
     etime = time.toString(); 
    } 
      //************************************************************************ 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put(DATE_TAG, date); 
    map.put(DESCRIPTION_TAG, description); 
    map.put(TIME_TAG, etime); 

    list.add(map); 

輸出 - 我不明白這個輸出我認爲投入是3339格式,但輸出很難合作。我想我可以讓一個解析器從給出的字符串中解析出530,但我認爲我的輸出將是toString()操作的YYYYMMDDTHHMMSS格式。

20000101T053000UTC(0,0,0,-1,946704600) 

編輯::這就是我一起砍了什麼,想要什麼,我想用一點努力。它現在工作。

JSONArray arr = null; 
list = new ArrayList<HashMap<String, String>>(); 
} 
for (int i = 0; i < arr.length(); i++) { 
    JSONObject d = arr.getJSONObject(i); 
    String etime = d.getString(TIME_TAG); 
    String description = d.getString(DESCRIPTION_TAG); 
    String date = d.getString(DATE_TAG); 

     if (eTime.charAt(11) == '0') 
    eTime = eTime.substring(12, 16); 
    else 
    eTime = eTime.substring(11, 16); 

      HashMap<String, String> map = new HashMap<String, String>(); 
    map.put(DATE_TAG, date); 
    map.put(DESCRIPTION_TAG, description); 
    map.put(TIME_TAG, etime); 

    list.add(map); 

回答

0

解決大多數Json格式問題的最好方法是反過來:創建您的時間,轉換爲Json對象並調查字符串表示形式。我想你會很快找到你的問題。

關於你的問題:DateTime你發佈的格式是ISO 8601.JSON沒有指定這種格式的日期/時間。

您可以嘗試使用Joda Time來獲取Json可以解析的正確日期類型。

或者ISO time format

或者其他不錯的方式來使用GSON庫。

+0

好吧所以我認爲是看你在什麼。最接受的時間格式是一個看起來像「2008-10-13T16:00:00.000Z」的字符串「我的輸入缺少最後3個整數。 '2000-01-01-T05:30:00Z'這是否意味着我只是無法解析這種格式?如果是這種情況,那麼我想我可能通過刪除最後一個字符並添加一個「+」.000Z「' – doubleA

+0

@doubleA右鍵,確保'.000Z'不存在,但是從我的exp中刪除。你仍然無法解析它。之前,將其轉換爲適當的日期形式 –

+0

我最終只是爲了我所需要的而工作。我上面發佈了我的編輯。我可能會稍後回去改變它,但現在它正在按照我希望的方式工作。謝謝你的幫助好先生。 ---順便說一句,即使刪除最後一個字符並添加「.000Z」,也不會將字符串以正確的格式進行解析。我想知道這是爲什麼。如果解析器確實只是解析一個字符串,如果它是以特定格式創建的話,它應該是否重要? – doubleA

0

您擁有的時間格式是SQL。你可以使用java.SQL.date類來解析它。