Android:为什么ID为“EST”的时区对useDaylightTime()返回false

问题描述 投票:0回答:2

在我的Android应用程序中,为什么EST时区总是为useDaylightTime()返回false。它发现EST使用夏令时但该方法总是返回false(参考:time zone list)。

   TimeZone tz = TimeZone.getTimeZone("EST");
    if(tz.useDaylightTime()){
    //Never enters here
    }

请有人帮我弄清楚出了什么问题?我不太了解这个话题,我很欣赏任何有关这个主题的想法。

关于我所面临的情况的更多信息:我知道“EDT”是用于表示夏令时时区的时区的ID,但在我的情况下,时区ID是从服务器端收到的,我正在使用那个来知道夏令时适用于该时区。

android timezone dst
2个回答
3
投票

不要依赖三个和四个字母的时区缩写。他们很暧昧。 EST可以参考北美东部标准时间或澳大利亚东部标准时间(不知道是否还有更多)。而是使用区域/城市格式的时区ID,例如America / New_York或Australia / Sydney。见Wikipedia for list

要回答您的问题:TimeZone将EST解释为-05:00的固定UTC偏移量。所以它没有任何夏令时。您可以说这是合乎逻辑的:夏令时不是标准时间。东部夏令时的缩写将改为EDT。

ZoneId

现在我们就在这里,TimeZone类已经过时且设计不佳。如果可以,请查看java.time,现代Java日期和时间API,以及它的ZoneId类。

ZoneId zoneId = ZoneId.of( "America/New_York" ) ;
ZoneRules rules = zoneId.getRules() ;
boolean isNowInDst = rules.isDaylightSavings( Instant.now() ) ;

2
投票

为了让东部时间返回true,请不要使用该标准时间的ID,而是使用“America / New_York”:

TimeZone timeZone = TimeZone.getTimeZone("America/New_York");
if(timeZone.useDaylightTime()){
  Log.d(TAG, "Uses daylight savings time...");
}
© www.soinside.com 2019 - 2024. All rights reserved.