LocalDate异常错误

时间:2017-09-29 10:23:20

标签: java java-8 java-time date-parsing localdate

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


public class Solution {
public static void main(String[] args) {
    System.out.println(isDateOdd("MAY 1 2013"));
}

public static boolean isDateOdd(String date) {

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy");
    formatter = formatter.withLocale(Locale.ENGLISH); 
    LocalDate outputDate = LocalDate.parse(date, formatter);
    return ((outputDate.getDayOfYear()%2!=0)?true:false);
 }
}

我想知道,如果从年初到某个日期过去的天数是奇数。我尝试使用LocalDate来解析我的字符串中的日期(2013年5月1日),但是我收到错误:

  

线程中的异常" main" java.time.format.DateTimeParseException:Text' 2013年5月1日'无法在索引0处解析       at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)       at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)       at java.time.LocalDate.parse(LocalDate.java:400)       在com.javarush.task.task08.task0827.Solution.isDateOdd(Solution.java:23)       在com.javarush.task.task08.task0827.Solution.main(Solution.java:16)

哪里出了问题?

3 个答案:

答案 0 :(得分:5)

如果你想使用所有大写字母的月份输入,例如MAY,你必须使用不区分大小写的DateTimeFormatter:

public static boolean isDateOdd(String date) {
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .appendPattern("MMM d yyyy")
            .toFormatter(Locale.ENGLISH);
    LocalDate outputDate = LocalDate.parse(date, formatter);
    return (outputDate.getDayOfYear() % 2 != 0);
}

parseCaseSensitive()方法的documentation表示:

  

由于默认区分大小写,因此只应在上一次调用#parseCaseInsensitive之后使用此方法。

答案 1 :(得分:2)

MAY修改为May,将1修改为01,它会有效。

答案 2 :(得分:2)

您的日期部分应有两位数字,即torchvision

然后,如果您确实要传递大写月份名称,则应使用构建器和"MAY 01 2013"

全部放在一起:

parseCaseInsensitive()