首页 > 解决方案 > java.text.ParseException:无法解析的日期:“2/9/2016 10:30:00 AM (GMT-05:00) 东部时间(美国和加拿大)”

问题描述

尝试解析此日期时出现异常:

“2/9/2016 10:30:00 AM (GMT-05:00) 东部时间(美国和加拿大)”代码

DateFormat format = new SimpleDateFormat("d/m/yyyy HH:mm:ss aaa zzz", Locale.ENGLISH); 
format.parse("2/9/2016 10:30:00 AM (GMT-05:00) Eastern Time (US & Canada)");

标签: javadatedatetimetimetimezone

解决方案


你用m的月份是错误的。您必须使用M月份和m分钟。

我还建议您使用DateTimeFormatter而不是使用过时的SimpleDateFormat. 检查这里以了解有关现代日期/时间 API 的更多信息。

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .parseCaseInsensitive()
                .appendPattern("d/M/yyyy hh:mm:ss a (zzz)")
                .toFormatter(Locale.ENGLISH);
        ZonedDateTime zdt = ZonedDateTime.parse("2/9/2016 10:30:00 AM (GMT-05:00)", formatter);
        System.out.println(zdt);
    }
}

输出:

2016-09-02T10:30-05:00[GMT-05:00]

还,

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .parseCaseInsensitive()
                .appendPattern("d/M/yyyy hh:mm:ss a (zzz)")
                .appendLiteral(" Eastern Time (US & Canada)")
                .toFormatter(Locale.ENGLISH);
        ZonedDateTime zdt = ZonedDateTime.parse("2/9/2016 10:30:00 AM (GMT-05:00) Eastern Time (US & Canada)",
                formatter);
        System.out.println(zdt);
        System.out.println(formatter.format(zdt));
    }
}

输出:

2016-09-02T10:30-05:00[GMT-05:00]
2/9/2016 10:30:00 AM (GMT-05:00) Eastern Time (US & Canada)

推荐阅读