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

Java 11中如何移除Date对象的时区与时间元素?

问题核心澄清

首先明确:Date对象本质是一个时间戳,仅记录从1970年1月1日UTC零点到某时刻的毫秒数,本身不带任何格式、时区信息。你看到的带时区和时间的内容,只是Date.toString()默认输出的格式,并非对象本身属性。不存在“移除Date对象中的时区与时间约束”的说法,你实际需要的是将Date对象格式化为DD/MM/YYYY格式的字符串。

修正后的解决方案

1. 用旧版SimpleDateFormat实现

先修正你解析代码的参数错误,再用单独的格式化实例输出目标格式:

String dateStr = "Tue Dec 06 00:00:00 EDT 2002";
// 第一步:解析字符串得到Date对象
DateFormat parser = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy");
Date myDate = parser.parse(dateStr);

// 第二步:将Date对象格式化为DD/MM/YYYY的字符串
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String formattedDate = formatter.format(myDate);
System.out.println(formattedDate); // 输出:06/12/2002

2. 推荐:Java 8+ 使用java.time新API(更安全可靠)

SimpleDateFormat存在线程不安全问题,Java 8及以上建议用java.time包的类,且LocalDate类专门表示“仅日期”,更贴合你的需求:

String dateStr = "Tue Dec 06 00:00:00 EDT 2002";
// 解析字符串为带时区的日期时间
DateTimeFormatter parser = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z uuuu", Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse(dateStr, parser);

// 转换为仅日期的LocalDate,再格式化为目标字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formattedDate = zdt.toLocalDate().format(formatter);
System.out.println(formattedDate); // 输出:06/12/2002

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:42:48