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

Java修改JSON文件timestamp_ms为UTC时间并回写的实现方案咨询

解决方法

你当前的代码只差3个核心逻辑:字段替换、修改同步到原JSON结构、写入本地文件,以下是修正后的完整可运行代码:

import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class JsonMain {
    public static void main(String[] args) throws IOException {
        String inputPath = "chatMessage.json";
        // 若要直接覆盖原文件,可将outputPath改为和inputPath一致
        String outputPath = "chatMessage_utc.json";
        // 读取原始JSON文件
        String jsonSource = new String(Files.readAllBytes(Paths.get(inputPath)), "UTF-8");
        JSONObject rootObj = new JSONObject(jsonSource);
        JSONArray messagesArr = rootObj.getJSONArray("messages");

        // 显式指定UTC日期输出格式,可按需调整格式字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

        // 遍历修改每个消息的timestamp_ms字段
        for (int i = 0; i < messagesArr.length(); i++) {
            JSONObject messageObj = messagesArr.getJSONObject(i);
            long timestamp = messageObj.getLong("timestamp_ms");
            String utcTime = sdf.format(new Date(timestamp));
            // 直接覆盖原字段值
            messageObj.put("timestamp_ms", utcTime);
        }

        // 写入输出文件,toString(4)代表缩进4空格生成格式化易读JSON,不需要格式化传0即可
        Files.write(Paths.get(outputPath), rootObj.toString(4).getBytes("UTF-8"));
        System.out.println("转换完成,结果已写入:" + outputPath);
    }
}

如果你项目用Maven管理依赖,确保pom.xml中已有org.json的依赖配置:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20230227</version>
</dependency>

关键说明

  • org.json的JSONObject、JSONArray都是引用传递,拿到数组下标对应的消息对象修改后,修改会自动同步到上层的JSON结构,不需要额外手动回写
  • 可以按需调整SimpleDateFormat的格式字符串,比如需要ISO 8601标准格式可以改为"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
  • Java 8及以上版本推荐用线程安全的Instant类代替SimpleDateFormat,代码更简洁:
    // 替换SimpleDateFormat相关逻辑即可
    String utcTime = Instant.ofEpochMilli(timestamp).toString();
    // 输出示例:2021-05-10T15:37:35.808Z
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 15:24:01