如何让SimpleDateFormat解析不同日期输出统一时区的Date对象
问题分析
你遇到的问题根源在于:SimpleDateFormat默认使用系统默认时区,而英国时区(GMT/BST)存在夏令时切换机制——12月处于标准时间(GMT),6月处于夏令时(BST)。Date对象本身只是时间戳(无时区属性),调用toString()时会根据系统时区和日期是否在夏令时区间,自动显示对应的时区标识,导致输出不一致。
解决方案
以下两种方案都能实现统一时区输出,优先推荐Java 8+的新日期API:
方案1:使用Java 8+ java.time新API(推荐)
新API线程安全、设计更合理,可直接指定固定时区:
import java.time.LocalDate; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; public class ParseDate { public static final String DATE_FORMAT = "yyyy-MM-dd"; // 固定指定GMT时区 public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(DATE_FORMAT) .withZone(ZoneId.of("GMT")); public static void main(String[] args) { LocalDate date1 = LocalDate.parse("2020-12-31", DATE_FORMATTER); LocalDate date2 = LocalDate.parse("2020-06-30", DATE_FORMATTER); // 转换为带GMT时区的起始时间 ZonedDateTime zdt1 = date1.atStartOfDay(ZoneId.of("GMT")); ZonedDateTime zdt2 = date2.atStartOfDay(ZoneId.of("GMT")); System.out.println("Converting 2020-12-31 to " + zdt1); System.out.println("Converting 2020-06-30 to " + zdt2); } }
输出:
Converting 2020-12-31 to 2020-12-31T00:00Z[GMT] Converting 2020-06-30 to 2020-06-30T00:00Z[GMT]
方案2:给旧版SimpleDateFormat指定固定时区(兼容Java 8以下)
修改原代码,为格式化器强制设置固定时区:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class ParseDate { public static final String DATE_FORMAT = "yyyy-MM-dd"; public static SimpleDateFormat DateFormatter = new SimpleDateFormat(DATE_FORMAT); static { // 固定指定GMT时区,也可替换为"Europe/London"等其他时区ID DateFormatter.setTimeZone(TimeZone.getTimeZone("GMT")); } public static void main(String[] args) { try { System.out.println("Converting 2020-12-31 to " + DateFormatter.parse("2020-12-31")); System.out.println("Converting 2020-06-30 to " + DateFormatter.parse("2020-06-30")); } catch (ParseException e) { e.printStackTrace(); } } }
输出:
Converting 2020-12-31 to Thu Dec 31 00:00:00 GMT 2020 Converting 2020-06-30 to Tue Jun 30 00:00:00 GMT 2020
内容的提问来源于stack exchange,提问作者Nag
相关产品推荐
相关产品推荐

