Java中的TimeZone验证

use*_*643 10 java validation timezone

我有一个字符串,我需要检查它是否是标准的时区标识符.我不确定我需要使用哪种方法.

String timeZoneToCheck = "UTC";
Run Code Online (Sandbox Code Playgroud)

我想检查它是否代表有效的时区.

Mac*_*cki 18

你可以把它写成一行

public boolean validTimeZone(String timezone) {
  return Arrays.asList(TimeZone.getAvailableIDs()).contains(timezone);
}
Run Code Online (Sandbox Code Playgroud)


kos*_*osa 12

您可以使用getAvailableIDs()获取所有支持的ID

然后循环supportedID数组并与String进行比较.

例:

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)


yal*_*ali 7

这很简单,只需使用 ZoneId.of("Asia/Kolkata")

try {
    ZoneId.of("Asia/Kolkataa");
} catch (Exception e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

如果您插入无效时区,它将抛出异常

**java.time.zone.ZoneRulesException: Unknown time-zone ID: Asia/Kolkataa**
Run Code Online (Sandbox Code Playgroud)


Min*_*ing 5

这是一种比遍历所有可能的 ID 更有效的解决方案。它检查 的输出getTimeZone

Java 文档 (TimeZone#getTimeZone):

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

因此,如果输出是 GMT 时区,则输入无效,除非输入实际是“GMT”。

public static boolean isValidTimeZone(@NonNull String timeZoneID) {
    return (timeZoneID.equals("GMT") || !TimeZone.getTimeZone(timeZoneID).getID().equals("GMT"));
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想使用有效时区而不调用getTimeZone两次:

TimeZone timeZone = TimeZone.getTimeZone(timeZoneToCheck);
if(timeZoneToCheck.equals("GMT") || !timeZone.getID().equals("GMT")) {
    // TODO Valid - use timeZone
} else {
    // TODO Invalid - handle the invalid input
}
Run Code Online (Sandbox Code Playgroud)