Java:getTimeZone 不返回默认值

我有以下指令:

TimeZone zone = TimeZone.getTimeZone("Asia/Toyo");

显然,它应该返回 null,但它会返回默认时区,这不是我所希望的行为.来自 Java 文档:

返回指定的TimeZone,如果无法理解给定的 ID,则返回 GMT 时区.

Returns the specified TimeZone,or the GMT zone if the given ID cannot be understood.

如果String不表示有效的TimeZone,有没有办法获取对应的TimeZone和null值?

我没有找到一个很好的解决方案来获取所有 TimeZone 并对其进行迭代.

fujing11111 回答:Java:getTimeZone 不返回默认值

java.time.ZoneId

旧的日期时间类现在是遗留的,被 java.time 类取代.

java.time.ZoneId

The old date-time classes are now legacy, supplanted by the java.time classes.

您应该使用 ZoneId.要解析 正确的时区名称,请调用 ZoneId.of.

ZoneId.of ( "Africa/Casablanca" ) 

ZoneRulesException

的陷阱

如果您传入的名称无法识别,则该方法会抛出 ZoneRulesException.

所以,要找出 Asia/Tokyo 作为 Asia/Toyo,陷阱为 ZoneRulesException.

ZoneId z;
try {
    z = ZoneId.of ( "Asia/Toyo" );  // Misspell "Asia/Tokyo" as "Asia/Toyo".
} catch ( ZoneRulesException e ) {
    System.out.println ( "Oops! Failed to recognize your time zone name. ZoneRulesException message: " + e.getMessage () );
    return;
}
ZonedDateTime zdt = ZonedDateTime.now ( z );

查看此代码在 IdeOne.com 上实时运行.

java.time 框架内置于 Java 8 及更高版本.这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date, 日历, &SimpleDateFormat.

Joda-Time 项目,现在在 维护模式,建议迁移到 java.time 类.

要了解更多信息,请参阅 Oracle 教程.并在 Stack Overflow 上搜索许多示例和解释.规范是 JSR 310.

从哪里获得 java.time 类?

  • Java SE 8SE 9 及更高版本
    • 内置.
    • 标准 Java API 的一部分,带有捆绑实现.
    • Java 9 添加了一些小功能和修复.
    • The ThreeTenABP project adapts ThreeTen-Backport (mentioned above) for Android specifically.
    • See How to use ThreeTenABP….

    ThreeTen-Extra 项目通过附加类扩展了 java.time.该项目是未来可能添加到 java.time 的试验场.您可以在这里找到一些有用的类,例如 间隔YearWeek, YearQuarter更多.

    这篇关于Java:getTimeZone 不返回默认值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3175534.html

大家都在问