Android :为什么时区 ID "EST" returns false for useDaylightTime()
Android : Why Time Zone with id "EST" returns false for useDaylightTime()
在我的 Android 应用中,为什么 useDaylightTime()
的 EST 时区总是 returns 错误。它发现 EST 使用夏令时,但该方法始终返回 false(参考:time zone list)。
TimeZone tz = TimeZone.getTimeZone("EST");
if(tz.useDaylightTime()){
//Never enters here
}
请谁能帮我弄清楚出了什么问题?我对这个主题了解不多,我很感激为获得关于这个主题的想法所做的任何努力。
关于我面临的情况的更多信息:我知道 "EDT" 是用于表示夏令时时区的时区的 ID,但在我的例子中,时区 ID 是从服务器端接收的,并且我正在使用那个知道夏令时适用于那个时区。
为了使东部时间 return 为真,请不要使用该标准时间的 ID,而应使用 "America/New_York":
TimeZone timeZone = TimeZone.getTimeZone("America/New_York");
if(timeZone.useDaylightTime()){
Log.d(TAG, "Uses daylight savings time...");
}
不要依赖三个和四个字母的时区缩写。他们是模棱两可的。 EST可能指的是北美东部标准时间或者澳大利亚东部标准时间(不知道还有没有)。而是使用 region/city 格式的时区 ID,例如 America/New_York 或 Australia/Sydney。参见 Wikipedia for list。
回答您的问题:TimeZone
将 EST 解释为 -05:00 的固定 UTC 偏移量。所以它没有任何夏令时。你可能会说这是合乎逻辑的:夏令时不是标准时间。东部夏令时的缩写应该是 EDT。
ZoneId
现在我们开始了,TimeZone
class 已经过时且设计不佳。如果可以,请查看 java.time、现代 Java 日期和时间 API 及其 ZoneId
class。
ZoneId zoneId = ZoneId.of( "America/New_York" ) ;
ZoneRules rules = zoneId.getRules() ;
boolean isNowInDst = rules.isDaylightSavings( Instant.now() ) ;
在我的 Android 应用中,为什么 useDaylightTime()
的 EST 时区总是 returns 错误。它发现 EST 使用夏令时,但该方法始终返回 false(参考:time zone list)。
TimeZone tz = TimeZone.getTimeZone("EST");
if(tz.useDaylightTime()){
//Never enters here
}
请谁能帮我弄清楚出了什么问题?我对这个主题了解不多,我很感激为获得关于这个主题的想法所做的任何努力。
关于我面临的情况的更多信息:我知道 "EDT" 是用于表示夏令时时区的时区的 ID,但在我的例子中,时区 ID 是从服务器端接收的,并且我正在使用那个知道夏令时适用于那个时区。
为了使东部时间 return 为真,请不要使用该标准时间的 ID,而应使用 "America/New_York":
TimeZone timeZone = TimeZone.getTimeZone("America/New_York");
if(timeZone.useDaylightTime()){
Log.d(TAG, "Uses daylight savings time...");
}
不要依赖三个和四个字母的时区缩写。他们是模棱两可的。 EST可能指的是北美东部标准时间或者澳大利亚东部标准时间(不知道还有没有)。而是使用 region/city 格式的时区 ID,例如 America/New_York 或 Australia/Sydney。参见 Wikipedia for list。
回答您的问题:TimeZone
将 EST 解释为 -05:00 的固定 UTC 偏移量。所以它没有任何夏令时。你可能会说这是合乎逻辑的:夏令时不是标准时间。东部夏令时的缩写应该是 EDT。
ZoneId
现在我们开始了,TimeZone
class 已经过时且设计不佳。如果可以,请查看 java.time、现代 Java 日期和时间 API 及其 ZoneId
class。
ZoneId zoneId = ZoneId.of( "America/New_York" ) ;
ZoneRules rules = zoneId.getRules() ;
boolean isNowInDst = rules.isDaylightSavings( Instant.now() ) ;