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

时间:2019-03-26 13:57:41

标签: android timezone dst

在我的Android应用中,为什么react-native-gesture-handler的EST时区总是返回false。它发现EST使用夏令时,但是该方法始终返回false(参考:time zone list)。

useDaylightTime()

请任何人可以帮助我找出问题所在?我对该主题知之甚少,我很感激大家对此想法有所了解。

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

2 个答案:

答案 0 :(得分:3)

不要依赖三个字母和四个字母的时区缩写。他们是模棱两可的。 EST可能指的是北美东部标准时间或澳大利亚东部标准时间(不知道还有更多时间)。而是使用 region / city 格式的时区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() ) ;

答案 1 :(得分:2)

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

TimeZone timeZone = TimeZone.getTimeZone("America/New_York");
if(timeZone.useDaylightTime()){
  Log.d(TAG, "Uses daylight savings time...");
}