一尘不染

如何在Java中使用TimeZone解决夏时制

java

我必须在我的Java应用程序中打印EST时间。我使用以下方法将时区设置为EST:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));

但是,当在该时区遵循夏令时时,我的代码将无法打印正确的时间(它可以少打印1小时)。

不管是否遵守夏令时,如何使代码始终读取正确的时间?

PS:我尝试将时区设置为EDT,但不能解决问题。


阅读 333

收藏
2020-03-11

共1个答案

一尘不染

这是开始的问题:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));

应该完全避免使用3个字母的缩写,而应使用TZDB区域ID。EST是东部标准时间- 标准时间从不遵守夏令时;它不是一个完整的时区名称。这是部分时区的名称。(不幸的是,我对这个“半时区”概念还没有一个好词。)

你需要一个完整的时区名称。例如,America/New_York在东部时区:

TimeZone zone = TimeZone.getTimeZone("America/New_York");
DateFormat format = DateFormat.getDateTimeInstance();
format.setTimeZone(zone);

System.out.println(format.format(new Date()));
2020-03-11