将Unix时间戳字符串转换为可读日期时遭遇运算符错误
解决Unix时间戳字符串转可读日期的类型错误问题
嘿,这个问题我熟!你遇到的错误根源很明确:jsonChildNode.optString("date")返回的是字符串类型,而Java里不允许直接用*运算符把字符串和long数值相乘——这就像你试图用文字去乘数字,系统肯定懵圈啦。
核心思路
要解决这个问题,你需要先把字符串格式的Unix时间戳转换成long类型的数值,再进行乘1000的操作(因为Java的日期类通常需要毫秒级时间戳),最后再传给DateFormat.format方法生成可读日期。
方案一:字符串转long(基础版)
直接把字符串时间戳解析成long类型,再做运算:
// 先取出字符串格式的时间戳 String timestampStr = jsonChildNode.optString("date"); // 转成long后乘以1000得到毫秒级时间戳 long timestampMs = Long.parseLong(timestampStr) * 1000L; // 生成可读日期 item.put("date", DateFormat.format("dd/MM/yyyy hh:mm:ssaa", timestampMs));
方案二:更安全的异常处理版
如果JSON里的"date"字段可能是空值或者非数字格式,建议加个异常捕获,避免程序崩溃:
String timestampStr = jsonChildNode.optString("date"); try { long timestampMs = Long.parseLong(timestampStr) * 1000L; item.put("date", DateFormat.format("dd/MM/yyyy hh:mm:ssaa", timestampMs)); } catch (NumberFormatException e) { // 处理无效时间戳的情况,比如设置默认值 item.put("date", "Invalid Date"); e.printStackTrace(); // 或者记录日志排查问题 }
方案三:直接获取long类型时间戳(推荐)
如果你的JSON节点里的"date"本身就是数字类型(而不是字符串),可以直接用optLong方法获取long值,省去字符串转换的步骤,更高效也更安全:
// optLong的第二个参数是默认值,当字段不存在或无效时返回0 long timestamp = jsonChildNode.optLong("date", 0); if (timestamp != 0) { long timestampMs = timestamp * 1000L; item.put("date", DateFormat.format("dd/MM/yyyy hh:mm:ssaa", timestampMs)); } else { item.put("date", "Invalid Date"); }
这样修改后,你就能顺利把Unix时间戳转换成想要的dd/MM/yyyy hh:mm:ssaa格式啦!
内容的提问来源于stack exchange,提问作者Fresco
相关产品推荐
相关产品推荐

