我有以下说明:
TimeZone zone = TimeZone.getTimeZone("Asia/Toyo");
Run Code Online (Sandbox Code Playgroud)
显然,它应该返回 null,但它会返回默认时区,这不是我想要的行为。来自 Java 文档:
TimeZone如果无法理解给定的 ID,则返回指定的或 GMT 区域。
如果字符串不指示有效的时区,有没有办法获取相应的时区和空值?
我没有找到一个好的解决方案来获取所有时区并迭代它们。
java.time.ZoneId旧的日期时间类现在是遗留的,被 java.time 类取代。
相反java.util.TimeZone,您应该使用ZoneId. 要解析正确的时区名称,请调用ZoneId.of.
ZoneId.of ( "Africa/Casablanca" )
Run Code Online (Sandbox Code Playgroud)
ZoneRulesException如果您传入的名称无法识别,该方法将抛出一个 ZoneRulesException.
因此,要捕获Asia/Tokyoas的拼写错误,请为.trap 设置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 );
Run Code Online (Sandbox Code Playgroud)
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
从哪里获得 java.time 类?
该ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如Interval,YearWeek,YearQuarter,和更多。
这应该可以满足您在 Java 中进行时区验证的需求
String[] validIDs = TimeZone.getAvailableIDs();
for (String str : validIDs) {
if (str != null && str.equals("yourString")) {
System.out.println("Valid ID");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1498 次 |
| 最近记录: |