SE Asia标准时区在解析日期格式期间显示无法解析的日期异常

时间:2015-01-27 08:36:34

标签: java datetime java-ee

我在日期尝试使用不同的时区,一切正常,但 SE亚洲标准时间未解析显示无法解析的日期例外的完整日期。

String date="Sun Jan 18 2015 22:11:44 GMT+0700 (SE Asia Standard Time)";
        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z (zzzz)");
        try{
            System.out.println(new Timestamp(sdf.parse(date).getTime()));
        }catch(Exception e){
            e.printStackTrace();
        }

2 个答案:

答案 0 :(得分:1)

在Java中看起来这个时区被称为“ Indochina Time

我认为时区的名称不需要解析正确的日期,因为你的字符串中也有时间偏移量。因此,从字符串中删除时区名称应该这样做。

public static void main(String[] args) {
    String date = "Sun Jan 18 2015 22:11:44 GMT+0700 (SE Asia Standard Time)";

    date = date.substring(0, date.indexOf("("));
    SimpleDateFormat sdf = new SimpleDateFormat(
            "EEE MMM dd yyyy HH:mm:ss 'GMT'Z", Locale.ENGLISH);
    try {
        System.out.println(new Timestamp(sdf.parse(date).getTime()));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:1)

“SE Asia Standard Time”不是受支持的时区之一。对于GMT + 7,以下是可用的时区:

public static void main(String[] args) {
    Arrays.asList(TimeZone.getAvailableIDs()).stream()
            .map(TimeZone::getTimeZone)
            .filter(zone -> zone.getRawOffset() == 7 * 60 * 60 * 1000)
            .forEach(zone -> System.out.printf("%-20s  %s\n", zone.getID(), zone.getDisplayName()));
}
Antarctica/Davis      Davis Time
Asia/Bangkok          Indochina Time
Asia/Ho_Chi_Minh      Indochina Time
Asia/Hovd             Hovd Time
Asia/Jakarta          West Indonesia Time
Asia/Krasnoyarsk      Krasnoyarsk Time
Asia/Novokuznetsk     Krasnoyarsk Time
Asia/Phnom_Penh       Indochina Time
Asia/Pontianak        West Indonesia Time
Asia/Saigon           Indochina Time
Asia/Vientiane        Indochina Time
Etc/GMT-7             GMT+07:00
Indian/Christmas      Christmas Island Time
VST                   Indochina Time