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)
哪里出了问题?
答案 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()