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

Java中如何为不带T的UTC时间戳添加T标识并增加5分钟

问题原因
  • 你用到的SimpleDateFormat默认会用JVM的本地时区做格式化,输入的是UTC时间,输出时没有指定UTC时区,就会转换为你本地时区的时间,这是输出出现12点多的核心原因
  • SimpleDateFormat的S标识符只代表毫秒,最多支持3位,你输入的日期带6位微秒,会被直接识别为716241毫秒叠加到时间上,进一步导致时间计算错误
推荐实现(Java 8及以上版本,使用官方java.time日期库)

java.time库是JDK8之后官方推出的日期处理工具,解决了旧版Date、SimpleDateFormat的线程安全、时区处理混乱、精度支持差等问题,实现代码如下:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class DateConvert {
    public static void main(String[] args) {
        String d = "2021-08-27 06:25:00.716241+00:00";
        // 定义输入格式,匹配带微秒、时区的日期字符串
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSXXX");
        // 解析为带UTC时区的时间对象
        OffsetDateTime originUtcTime = OffsetDateTime.parse(d, inputFormatter);
        
        // 定义输出格式:带T标识、精度到秒
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
        // 输出转换后的原时间字符串
        String originFormatResult = originUtcTime.format(outputFormatter);
        System.out.println(originFormatResult); // 输出 2021-08-27T06:25:00
        
        // 增加5分钟后格式化输出
        OffsetDateTime timeAfterAdd = originUtcTime.plusMinutes(5);
        String addResult = timeAfterAdd.format(outputFormatter);
        System.out.println(addResult); // 输出 2021-08-27T06:30:00
    }
}
旧JDK兼容实现(仅用于JDK7及更早版本,不推荐长期使用)

如果必须使用旧的SimpleDateFormat,需要明确指定时区,避免自动转换为本地时区,代码如下:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class DateConvert {
    public static void main(String[] args) throws ParseException {
        String d = "2021-08-27 06:25:00.716241+00:00";
        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSXXX");
        // 强制指定输入解析使用UTC时区
        inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date originDate = inputFormat.parse(d);
        
        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
        // 强制指定输出格式化使用UTC时区
        outputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        String originResult = outputFormat.format(originDate);
        System.out.println(originResult); // 输出 2021-08-27T06:25:00
        
        // 增加5分钟
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        calendar.setTime(originDate);
        calendar.add(Calendar.MINUTE, 5);
        String addResult = outputFormat.format(calendar.getTime());
        System.out.println(addResult); // 输出 2021-08-27T06:30:00
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:09:02