gpt4 book ai didi

java - SetLenient(false) 与年份

转载 作者:行者123 更新时间:2023-11-30 07:40:38 25 4
gpt4 key购买 nike

我正在使用 DateFormat setLenient() 来解析字符串并验证日期。但是即使我传递了错误的年份,如 2 位或 3 位年份,我也无法验证年份。请告诉我如何仅在我通过扫描仪给出日期的情况下将年份解析为 4 位数字。

    Scanner sc1 = new Scanner(System.in);
System.out.println("enter date");
String date1 = sc1.nextLine();
String pattern="yyyy-MM-dd HH:mm:ss";
DateFormat formatter= new SimpleDateFormat(pattern);
formatter.setLenient(false);
try {
{
formatter.parse(date1);
System.out.println("valid date");
}
} catch (ParseException ex) {
System.out.println("invalid date");
}

最佳答案

您应该改用 DateTimeFormatter:DateTimeFormatter 在接受和不接受字符串方面要严格得多。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
try {
formatter.parse(date1);
System.out.println("valid date");
} catch (DateTimeParseException ex) {
System.out.println("invalid date");
}

setLenient 与年份是两位数还是四位数并没有多大关系。 “Lenient”在这里的意思与 Calendar 中的相同。它用于决定像 2019-01-32 这样的日期是否会自动变为 2019-02-01,我发现它很少有用。如果您也希望在 DateTimeFormatter 中使用这种非宽松的 SimpleDateFormat 行为,则需要使用:

String pattern = "uuuu-MM-dd HH:mm:ss";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern)
.withResolverStyle(ResolverStyle.STRICT);
try {
LocalDateTime.parse(date1, formatter);
System.out.println("valid date");
} catch (DateTimeParseException ex) {
System.out.println("invalid date");
}

关于java - SetLenient(false) 与年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57370572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com