首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中使用TimeZone解决夏令时问题

如何在Java中使用TimeZone解决夏令时问题
EN

Stack Overflow用户
提问于 2012-05-11 13:37:11
回答 7查看 110.7K关注 0票数 64

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

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

但是,当遵循这个时区的夏令时时,我的代码不能打印正确的时间(它少打印了一个小时)。

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

PS:我试着将时区设置为美国东部夏令时,但没有解决问题。

EN

回答 7

Stack Overflow用户

发布于 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" ) ) ;

票数 22
EN

Stack Overflow用户

发布于 2016-09-07 21:58:14

您可以输入"EST5EDT“作为时区,而不是输入"EST”。正如您所提到的,只使用"EDT“是行不通的。这将解决夏令时问题。代码行如下所示:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST5EDT"));
票数 4
EN

Stack Overflow用户

发布于 2015-12-15 02:55:29

根据此answer

TimeZone tz = TimeZone.getTimeZone("EST");
boolean inDs = tz.inDaylightTime(new Date());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10545960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档