Java 无法解析的日期 SimpleDateFormat

Java unparsable date SimpleDateFormat

我有一个看起来像这样的约会:

Sun Dec 29 00:24:09 CET 2019

我有一个实用方法可以将字符串日期从一种格式解析为另一种格式:

public String formatDate(String date, String fromFormat, String toFormat) throws Exception {
        SimpleDateFormat from = new SimpleDateFormat(fromFormat);
        SimpleDateFormat to = new SimpleDateFormat(toFormat);
        return to.format(from.parse(date));
    }

但是,对于上述日期格式,我找不到正确的日期模式来指示我的方法。 根据SimpleDateFormat patterns documentation,应该是(如果我没记错的话),如下(对于Sun Dec 29 00:24:09 CET 2019):

"E M d HH:mm:ss z yyyy"

但是,它抛出以下异常:

java.text.ParseException: Unparseable date: "Sun Dec 29 00:24:09 CET 2019"
        at java.text.DateFormat.parse(DateFormat.java:366)
        at com.aptar.simulator.Utils.formatDate(Utils.java:60)

方法是这样调用的:

formatDate(exDate, "E M d HH:mm:ss z yyyy", "dd-MM-yyyy HH:mm:ss");

哪里

exDate = "Sun Dec 29 00:24:09 CET 2019"

日期格式应为

EEE MMM dd HH:mm:ss z yyyy

您的代码使用这种格式工作正常。

使用 java.time API

LocalDate.parse(datestr, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy")).format("TO DATE PATTERN");

更多详情请见 Using java.time package to format date

尝试以下解决方案 -

formatDate("Sun Dec 29 00:24:09 CET 2019","EEE MMM d HH:mm:ss z yyyy","dd-MM-yyyy HH:mm:ss");

格式应为 - "EEE MMM d HH:mm:ss z yyyy"

你应该对太阳使用 EEE,对十二月使用 MMM

希望这对您有所帮助。

请找到下面的代码片段来解决您的问题。问题是字母代码是正确的,但是字符数不匹配,因此导致了问题。例如:Sun 有三个字符,但您在格式化程序中使用了一个 E。

public class Examp167 {
    public static String formatDate(String date, String fromFormat, String toFormat) throws Exception {
        SimpleDateFormat from = new SimpleDateFormat(fromFormat);
        SimpleDateFormat to = new SimpleDateFormat(toFormat);
        return to.format(from.parse(date));
    }
    public static void main(String[] args) throws Exception{
        String exDate  = "Sun Dec 29 00:24:09 CET 2019";
       System.out.println( formatDate(exDate, "EEE MMM dd HH:mm:ss zzz yyyy", "dd-MM-yyyy HH:mm:ss"));
    }
} 

首先使用 DateTimeFormatter 而不是过时的 class,然后您应该设置区域设置,因为日期和月份名称是英文的,最后输入格式需要是 MMM 而不是 M这个月

public static String formatDate(String date, String fromFormat, String toFormat) throws Exception {
    DateTimeFormatter inFormatter = DateTimeFormatter.ofPattern(fromFormat, Locale.US);

    DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern(toFormat, Locale.US);
    return outFormatter.format(inFormatter.parse(date));
}

示例:

String exDate = "Sun Dec 29 00:24:09 CET 2019";
String out = formatDate(exDate, "E MMM d HH:mm:ss z yyyy", "dd-MM-yyyy HH:mm:ss");
System.out.println(out);

29-12-2019 00:24:09