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
我有一个看起来像这样的约会:
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