字符串转UTC时区疑问:EST转UTC时差为何是4小时而非5小时?
为什么EST转UTC时差是4小时而非预期的5小时?
核心原因是时区缩写的歧义性与解析规则问题:
EST是多义的时区缩写,它不仅代表北美东部标准时间(UTC-5,冬令时),在部分时区数据库或系统配置中,可能被错误映射为UTC-4的偏移量(比如混淆了夏令时EDT的规则)。- Java的
DateTimeFormatter仅通过z模式解析时区缩写时,无法精准区分同名但偏移量不同的时区,尤其当系统默认时区规则不明确时,会出现解析偏差——你遇到的情况就是解析器把EST识别成了UTC-4的时区,导致转换后时差为4小时。
解决办法
不要使用模糊的时区缩写,改用明确的时区ID来定义格式化规则,确保解析器能准确识别时区的夏令时/冬令时规则:
// 指定北美东部时区ID DateTimeFormatter f = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss z") .withZone(ZoneId.of("America/New_York")); ZonedDateTime zdt = ZonedDateTime.parse(userTime, f).withZoneSameInstant(ZoneOffset.UTC);
使用上述代码后,12-09-2022 08:21:32 EST会被正确解析为北美东部冬令时时间,转换为UTC后结果为2022-12-09T13:21:32Z,符合你预期的5小时时差。
内容的提问来源于stack exchange,提问作者Lewis12
相关产品推荐
相关产品推荐

