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

如何为JSON返回的字符串格式时间添加5小时?现有Java代码执行失败

解决Java时间增加5小时的问题

我来帮你一步步排查问题并搞定这个时间调整的需求!

首先,你的代码存在两个关键问题:

  1. 格式化字符串不匹配:你的输入时间格式是"2019-07-19 12:10:56"(用-分隔日期),但你创建SimpleDateFormat时用的是"yyyy/MM/dd HH:mm:ss"(用/分隔),这会直接导致解析失败,根本得不到正确的Date对象。
  2. Date对象不可变,修改方式错误:你修改了formatter内部的Calendar,但并没有把修改后的时间同步到已有的date1——因为Date是不可变对象,一旦创建就无法修改,必须通过Calendar生成新的Date。

方案1:修正你原有的SimpleDateFormat写法

如果你坚持用旧的日期API,可以这样调整代码:

String time = message_object.get("date").toString();
// 注意这里的格式要和输入字符串完全匹配!
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
    Date date1 = formatter.parse(time);
    // 创建Calendar实例并设置为解析后的时间
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date1);
    // 添加5小时,推荐用HOUR_OF_DAY避免12小时制的坑
    calendar.add(Calendar.HOUR_OF_DAY, 5);
    // 获取修改后的时间对象
    Date updatedDate = calendar.getTime();
    // 转成字符串输出(如果需要)
    String updatedTime = formatter.format(updatedDate);
    Log.i("UpdatedTime", updatedTime);
} catch (ParseException e) {
    // 处理解析失败的情况,比如输入格式错误
    e.printStackTrace();
}

方案2:推荐使用Java 8+的新时间API(更安全可靠)

SimpleDateFormat是线程不安全的,而且API设计比较繁琐,Java 8之后推出的java.time包(JSR-310)更简洁直观,还能避免很多旧API的坑:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

String time = message_object.get("date").toString();
// 定义匹配输入格式的格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 解析成LocalDateTime对象
LocalDateTime dateTime = LocalDateTime.parse(time, formatter);
// 直接添加5小时,返回一个新的不可变对象
LocalDateTime updatedDateTime = dateTime.plusHours(5);
// 转成字符串输出
String updatedTime = updatedDateTime.format(formatter);
Log.i("UpdatedTime", updatedTime);

这个新API逻辑清晰,线程安全,还能减少异常处理的麻烦,推荐优先使用。

内容的提问来源于stack exchange,提问作者Syed Arsalan Hussain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:19:49