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
相关产品推荐
相关产品推荐

