转换日期/时间毫秒Android

时间:2015-11-08 06:21:23

标签: android json date

我收到一个包含日期值的json数据,如下所示

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

我使用EndDate日期减去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"

这是我从json收到的格式,如上所示:"\/Date(1446912155713+0300)\/"

2 个答案:

答案 0 :(得分: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();
} 

答案 1 :(得分:1)

您遇到的问题是您收到的JSON不是有效的Long值。

您的方法convertDate需要Long作为它的第一个参数,并允许将String传递给它,但是在方法体中使用它:

Long.parseLong(dateInMilliseconds)

如果String中包含“+”,则无法将Long解析为String。这不是数值(它是一个运算符)。

首先需要将Long值“Date(1446912155713 + 0300)”转换为有效的Long格式。特别是,在尝试将其转换为{{1}}之前,您需要删除“+0300”或以某种有意义的方式使用它。已经发布的答案假定这是一个时区调整。