You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:49:26