具有单个模式字母的DateTimeFormatter格式无法解析短月份名称

时间:2017-09-22 15:59:01

标签: java datetime-format java-time

运行下面列出的代码时,我看到以下错误:

  

线程中的异常" main" java.time.format.DateTimeParseException:   文字'星期四9月21日23:47:03 EDT 2017'无法在索引4处解析   java.time.format.DateTimeFormatter.parseResolved0(未知来源)at   java.time.format.DateTimeFormatter.parse(未知来源)at   java.time.LocalDate.parse(未知来源)at   com.example.demo.DateTest.main(DateTest.java:16)

代码

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class DateTest {    
    public static void main(String[] args) {
        String date = "Thu Sep 21 23:47:03 EDT 2017";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E M d H:m:s z y", Locale.ENGLISH);
        LocalDate startDate = LocalDate.parse(date, formatter);
        System.out.println(date);           
    }    
}

1 个答案:

答案 0 :(得分:3)

您使用M作为月份格式说明符,但M是数字/文本字段,因此它需要一个数值。

我还怀疑你的时间部分是HH:mm:ss而不是H:m:s,而今年是yyyy。 (除非你真的在1000AD之前有日期,否则后者不太可能成为问题。)

这有效:

DateTimeFormatter formatter =
    DateTimeFormatter.ofPattern("E MMM d HH:mm:ss z yyyy", Locale.ENGLISH);