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

Java中转换/Date(xxx+0000/)为yyyyMMdd:hhmmss及+0000含义解析

Java中转换"/Date(xxxxxx+0000)/"格式日期为yyyyMMdd:hhmmss的方法

首先说明+0000的含义:这是时区偏移量,格式为±HHmm,+0000表示当前时间与UTC(协调世界时)的偏移为0小时0分,也就是标准UTC时间。

核心思路

先从目标字符串中提取出毫秒数和时区偏移量,再根据偏移量将毫秒数转换为对应时区的日期,最后格式化为目标样式。


方法一:使用旧版API(java.util.Date + SimpleDateFormat)

适合Java 8之前的版本,注意SimpleDateFormat是非线程安全的,多线程场景需谨慎使用。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class LegacyDateConverter {
    public static void main(String[] args) {
        String dateStr = "/Date(253402214400000+0000)/";
        // 正则匹配提取毫秒数和时区偏移
        Pattern pattern = Pattern.compile("/Date\\((\\d+)([+-]\\d{4})\\)/");
        Matcher matcher = pattern.matcher(dateStr);
        
        if (matcher.find()) {
            // 提取并转换毫秒数
            long timestamp = Long.parseLong(matcher.group(1));
            Date date = new Date(timestamp);
            
            // 设置目标格式及时区
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd:HHmmss");
            // 偏移量拼接GMT前缀,转换为TimeZone可识别的格式
            sdf.setTimeZone(TimeZone.getTimeZone("GMT" + matcher.group(2)));
            
            // 格式化输出
            String formattedDate = sdf.format(date);
            System.out.println(formattedDate);
        }
    }
}

方法二:使用Java 8+ 新日期API(推荐)

Java 8及以上版本优先使用java.time包下的API,线程安全且功能更完善。

import java.time.Instant;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ModernDateConverter {
    public static void main(String[] args) {
        String dateStr = "/Date(253402214400000+0000)/";
        Pattern pattern = Pattern.compile("/Date\\((\\d+)([+-]\\d{4})\\)/");
        Matcher matcher = pattern.matcher(dateStr);
        
        if (matcher.find()) {
            long timestamp = Long.parseLong(matcher.group(1));
            String offsetStr = matcher.group(2);
            
            // 将偏移量转换为ZoneOffset可识别的格式(如+0000转为+00:00)
            ZoneOffset zoneOffset = ZoneOffset.of(
                offsetStr.substring(0, 3) + ":" + offsetStr.substring(3)
            );
            
            // 从毫秒数构建Instant,再转换为对应时区的日期
            Instant instant = Instant.ofEpochMilli(timestamp);
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd:HHmmss");
            
            String formattedDate = formatter.format(instant.atOffset(zoneOffset));
            System.out.println(formattedDate);
        }
    }
}

补充说明

  • 若偏移量固定为+0000,可直接使用ZoneOffset.UTC替代偏移量解析步骤,简化代码。
  • 正则表达式/Date\\((\\d+)([+-]\\d{4})\\)/可适配带正负偏移的格式,比如/Date(16747622680000-0800)/这类东八区偏移的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:46:29