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

