我必须在我的Java应用程序中打印EST时间。我使用以下命令将时区设置为EST:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));
但是,当遵循这个时区的夏令时时,我的代码不能打印正确的时间(它少打印了一个小时)。
如何使代码始终读取正确的时间,而不管是否遵守夏令时?
PS:我试着将时区设置为美国东部夏令时,但没有解决问题。
发布于 2016-01-05 09:33:02
其他答案是正确的,特别是the one by Jon Skeet,但已经过时了。
java.time
这些旧的date-time类已经被Java8和更高版本中内置的java.time框架所取代。
如果您只是想要当前时间,请使用Instant
类。
Instant now = Instant.now();
正如correct Answer by Jon Skeet中所述,EST
不是时区。这种3-4个字母的代码既不是标准化的,也不是唯一的,这进一步造成了对夏令时(DST)的混淆。使用“大陆/地区”格式的正确时区名称。
也许你指的是北美东海岸的东部标准时间?还是埃及标准时间?还是欧洲标准时间?
ZoneId zoneId = ZoneId.of( "America/New_York" );
ZoneId zoneId = ZoneId.of( "Africa/Cairo" );
ZoneId zoneId = ZoneId.of( "Europe/Lisbon" );
使用任何这样的ZoneId
对象来获取调整到特定时区的当前时刻,以生成ZonedDateTime
对象。
ZonedDateTime zdt = ZonedDateTime.now( zoneId ) ;
通过在第一个时区中生成另一个ZonedDateTime对象,将该ZonedDateTime调整为不同的时区。java.time框架使用immutable objects,而不是更改(突变)现有对象。
ZonedDateTime zdtGuam = zdt.withZoneSameInstant( ZoneId.of( "Pacific/Guam" ) ) ;
发布于 2016-09-07 21:58:14
您可以输入"EST5EDT“作为时区,而不是输入"EST”。正如您所提到的,只使用"EDT“是行不通的。这将解决夏令时问题。代码行如下所示:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST5EDT"));
发布于 2015-12-15 02:55:29
根据此answer
TimeZone tz = TimeZone.getTimeZone("EST");
boolean inDs = tz.inDaylightTime(new Date());
https://stackoverflow.com/questions/10545960
复制相似问题