在我的Android应用中,为什么react-native-gesture-handler
的EST时区总是返回false。它发现EST使用夏令时,但是该方法始终返回false(参考:time zone list)。
useDaylightTime()
请任何人可以帮助我找出问题所在?我对该主题知之甚少,我很感激大家对此想法有所了解。
有关我面临的情况的更多信息:我知道“ EDT”是用于表示夏时制时区的时区的ID,但是在我的情况下,时区ID是从服务器端收到的,我正在使用该ID知道夏令时适用于该时区。
答案 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...");
}