2015-11-08 56 views
1

日期/時間的毫秒我收到以下轉換的Android

{"EndDate":"\/Date(1446912155713+0300)\/","CreatedOn":"\/Date(1446908555777+0300)\/","user":"user1"} 

含有日期值作爲顯示一個JSON數據我減去CreatedOn日期與結束日期日期得到的分鐘數。在做減法之前,我將這樣的日期轉換爲例如。

System.out.println(convertDate("1446912155713+0300", "hh:mm:ss")); 
public static String convertDate(String dateInMilliseconds,String dateFormat) { 
return DateFormat.format(dateFormat, Long.parseLong(dateInMilliseconds)).toString(); 
} 

而我得到這個錯誤。

Caused by: java.lang.NumberFormatException: Invalid long: "1446908555777+0300" 

這是格式I接收它從JSON作爲顯示上述:"\/Date(1446912155713+0300)\/"

+0

如果您嘗試將字符串「100 + 2」轉換爲雙倍,它不會給出NumberFormatException,因爲它不是一個數字,因爲它不是有效數字。 「+0300」用於時區我猜 –

回答

1

作爲毫秒的長度將保持不變,至少下一個3個世紀,可以從毫秒String可以請執行下列操作。

String date = "1446908555777+0300"; 

date = date.substring(0, 12); //0 => start; 12=>last index of valid millisecond 

System.out.println(convertDate(date, "hh:mm:ss")); 
public static String convertDate(String dateInMilliseconds,String dateFormat) { 
return DateFormat.format(dateFormat, Long.parseLong(dateInMilliseconds)).toString(); 
} 
+0

它給出了錯誤的日期,爲什麼它是 – Naz141

+0

轉換後你得到了什麼? –

1

您遇到的問題是您收到的JSON不是有效的Long值。

你的方法convertDate需要一個Long,因爲它是第一個參數,你允許String傳遞進去,但後來用這個方法主體:

Long.parseLong(dateInMilliseconds) 

不能解析String成一個Long當它有一個「+」在其中。這不是一個數值(它是一個運算符)。

首先需要將String值「Date(1446912155713 + 0300)」轉換爲有效的Long格式。尤其是,在嘗試將其轉換爲Long之前,您需要刪除「+0300」或以某種有意義的方式使用它。已發佈的答案假定這是一個時區調整。