TimeZone validation in Java

前端 未结 9 2095
梦如初夏
梦如初夏 2021-02-20 00:08

I have a string, I need to check whether it is a standard time zone identifier or not. I am not sure which method I need to use.

String timeZoneToCheck = \"UTC\"         


        
9条回答
  •  没有蜡笔的小新
    2021-02-20 00:13

    private boolean isValidTimeZone(final String timeZone) {
        final String DEFAULT_GMT_TIMEZONE = "GMT";
        if (timeZone.equals(DEFAULT_GMT_TIMEZONE)) {
            return true;
        } else {
            // if custom time zone is invalid,
            // time zone id returned is always "GMT" by default
            String id = TimeZone.getTimeZone(timeZone).getID();
            if (!id.equals(DEFAULT_GMT_TIMEZONE)) {
                return true;
            }
        }
        return false;
    }
    

    The method returns true for the following:

    assertTrue(this.isValidTimeZone("JST"));
    assertTrue(this.isValidTimeZone("UTC"));
    assertTrue(this.isValidTimeZone("GMT"));
    // GMT+00:00
    assertTrue(this.isValidTimeZone("GMT+0"));
    // GMT-00:00
    assertTrue(this.isValidTimeZone("GMT-0"));
    // GMT+09:00
    assertTrue(this.isValidTimeZone("GMT+9:00"));
    // GMT+10:30
    assertTrue(this.isValidTimeZone("GMT+10:30"));
    // GMT-04:00
    assertTrue(this.isValidTimeZone("GMT-0400"));
    // GMT+08:00
    assertTrue(this.isValidTimeZone("GMT+8"));
    // GMT-13:00
    assertTrue(this.isValidTimeZone("GMT-13"));
    // GMT-13:59
    assertTrue(this.isValidTimeZone("GMT+13:59"));
    // NOTE: valid time zone IDs (see TimeZone.getAvailableIDs())
    // GMT-08:00
    assertTrue(this.isValidTimeZone("America/Los_Angeles"));
    // GMT+09:00
    assertTrue(this.isValidTimeZone("Japan"));
    // GMT+01:00
    assertTrue(this.isValidTimeZone("Europe/Berlin"));
    // GMT+04:00
    assertTrue(this.isValidTimeZone("Europe/Moscow"));
    // GMT+08:00
    assertTrue(this.isValidTimeZone("Asia/Singapore"));
    

    ...And false with the following timezones:

    assertFalse(this.isValidTimeZone("JPY"));
    assertFalse(this.isValidTimeZone("USD"));
    assertFalse(this.isValidTimeZone("UTC+8"));
    assertFalse(this.isValidTimeZone("UTC+09:00"));
    assertFalse(this.isValidTimeZone("+09:00"));
    assertFalse(this.isValidTimeZone("-08:00"));
    assertFalse(this.isValidTimeZone("-1"));
    assertFalse(this.isValidTimeZone("GMT+10:-30"));
    // hours is 0-23 only
    assertFalse(this.isValidTimeZone("GMT+24:00"));
    // minutes 00-59 only
    assertFalse(this.isValidTimeZone("GMT+13:60"));
    

提交回复
热议问题