【问题标题】:convert date/time milliseconds Android转换日期/时间毫秒 Android
【发布时间】:2015-11-08 06:21:23
【问题描述】:

我收到一个包含日期值的 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)\/"

【问题讨论】:

  • 如果您尝试将字符串“100+2”转换为双倍,它不会给您NumberFormatException,因为它不是有效数字,因为字符串中有“+”号这不是一个数字。 “+0300”是我猜的时区

标签: android json date


【解决方案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();
} 

【讨论】:

  • 转换后什么时间?
【解决方案2】:

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

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

Long.parseLong(dateInMilliseconds)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多