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

使用javax.json读取JSON UTC毫秒时间时出现信息丢失问题求助

问题分析与解决方案

没错,你猜的完全正确!这个问题就是long转int时的数值溢出导致的信息丢失。

先给你算个明白:你要读取的时间戳1526438700000是典型的UTC毫秒级时间,它的数值远大于Java中int类型的最大值——2^31-1也就是2147483647。当你调用getInt("time")时,javax.json会尝试把这个超出int范围的数值强行转成int,这就会触发整数溢出,得到一个完全错误的结果。

至于你说的“没有getLong方法”,其实是没找对正确的调用方式:javax.json的JsonObject确实没有直接的getLong,但它的getJsonNumber方法会返回一个JsonNumber对象,而这个对象提供了longValue()方法,可以安全地获取到long类型的数值。

正确的代码写法应该是这样的:

// 从JsonObject中获取时间戳对应的JsonNumber对象
JsonNumber timeJsonNum = jsonObj.getJsonNumber("time");
// 调用longValue()拿到正确的long类型时间戳
long timestamp = timeJsonNum.longValue();

如果是从JsonArray里读取的话,逻辑也是一样的:

// 假设你已经拿到了目标JsonArray和对应的索引index
JsonObject targetObj = jsonArray.getJsonObject(index);
JsonNumber timeJsonNum = targetObj.getJsonNumber("time");
long timestamp = timeJsonNum.longValue();

你之前尝试强制转换为long或者把变量声明为long没用,是因为getInt("time")已经在第一步就把数值转成了溢出后的int值,后续再转long也只是把错误的int值扩展成long,本质上还是错的。必须从源头就用JsonNumber的longValue()来获取正确的数值。

内容的提问来源于stack exchange,提问作者vathan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:19