Java 用户输入日期(mm/dd/yyyy)并验证输入的数据

Java 用户输入日期(mm/dd/yyyy)并验证输入的数据,java,validation,date,Java,Validation,Date,编程新手总数: 需要让用户以(mm/dd/yyyy)格式输入日期。 需要解析字符串并验证它是否为有效日期。 请帮忙。 使用java编程 import java.util.Scanner; public class ct0280642Assignment { public static void main(String [] dateValidation) { Scanner kb = new Scanner(System.in); System.

编程新手总数: 需要让用户以(mm/dd/yyyy)格式输入日期。 需要解析字符串并验证它是否为有效日期。
请帮忙。
使用java编程

import java.util.Scanner;

public class ct0280642Assignment
{
    public static void main(String [] dateValidation)
    {
        Scanner kb = new Scanner(System.in);
        System.out.println("Please enter a date (mm/dd/yyyy)");
        String uDate = kb.nextLine();
        int userDate = Integer.parseInt(uDate);
        int length = uDate.length();

        if(length != 10)
        {
            System.out.println(uDate+" is a not valid Date");
        }
        else
        {
            System.out.println(uDate+" is a valid Date");
        }
    }    

}
试试上面的代码

这里我使用了
DateFormat
函数,并尝试使用
df.parse(uDate)
解析该字符串。如果日期有效,它会自动将该字符串转换为
date

如果自动生成异常并由
ParseException
处理的字符串出现问题,则写入消息日期无效

public static void main(String [] dateValidation)
    {
        Scanner kb = new Scanner(System.in);
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
        sdf.setLenient(false);
        System.out.println("Please enter a date (mm/dd/yyyy)");
        String uDate = kb.nextLine();
        try{
            sdf.parse(uDate);
            System.out.println(uDate+" is a valid Date");
        }
        catch(Exception e)
        {
            System.out.println(uDate+" is not a valid Date");
        }
        kb.close();
    }  

希望这将对您有所帮助。

请尝试以下代码。SimpleDataFormat将解析给定的日期,如果输入无效,则引发异常

public static void main(String [] dateValidation)
    {
        Scanner kb = new Scanner(System.in);
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
        sdf.setLenient(false);
        System.out.println("Please enter a date (mm/dd/yyyy)");
        String uDate = kb.nextLine();
        try{
            sdf.parse(uDate);
            System.out.println(uDate+" is a valid Date");
        }
        catch(Exception e)
        {
            System.out.println(uDate+" is not a valid Date");
        }
        kb.close();
    }  
在此处找到SimpleDataFormat文档的链接


验证用户输入的一种常见方法是尝试对其进行解析,并查看是否成功。这在这里也适用。Java有很好的内置工具,可以解析各种固定格式的日期,因此我建议您使用以下工具:

private static final DateTimeFormatter PARSE_FORMATTER
        = DateTimeFormatter.ofPattern("MM/dd/uuuu");

public static void main(String [] dateValidation)
{
    try (Scanner kb = new Scanner(System.in)) {
        System.out.println("Please enter a date (mm/dd/yyyy)");
        String uDate = kb.nextLine();
        try {
            LocalDate.parse(uDate, PARSE_FORMATTER);
            System.out.println(uDate + " is a valid Date");
        } catch (DateTimeParseException dtpe) {
            System.out.println(uDate + " is a not valid Date");
        }
    }
}  
这接受2017年6月17日<代码>但拒绝2017年6月17日<代码>因为该月没有两位数。注意格式模式字符串
MM/dd/uuu
区分大小写(必须是大写
M
和小写
d
u

如果要允许一位数的月份和天数,请将格式化程序更改为

private static final DateTimeFormatter PARSE_FORMATTER 
        = DateTimeFormatter.ofPattern("M/d/uuuu");
现在所有2017年7月2日、2017年7月2日和2017年12月25日的代码都被接受

与您的问题无关,我使用了try with resources来确保
扫描仪在使用后关闭。这也会关闭标准输入


问题:这是否仅适用于Java 8?否,我正在使用的现代日期和时间API已在中向后移植到Java 6和7,特别是在中的Android中(当然,它适用于今年夏天发布的Java 9和更高版本…。

日期验证还是仅长度验证?“需要解析()”-为什么?为什么不使用内置的日期解析功能呢?这是因为作业是专门关于解析的吗?如果是这样,您需要:1)将输入拆分为组件;2) 将每个部分解析为一个整数;3) 验证组件是否合理(例如,不是2月30日)。请具体说明是哪一部分导致了问题。(目前看来你正试图将整个事情解析为一个整数…)你的搜索引擎也是新手吗?;-)请对您的使用进行培训,您可能不需要询问。您需要两位数的月份和日期,如2017年6月22日或2017年2月7日?有什么特别的原因不允许一个数字吗?认为这对用户来说是方便的,而且不含糊。在发布之前彻底搜索堆栈溢出。请不要教年轻人使用过时的
SimpleDateFormat
DateTimeFormatter
要好得多。@OleV.V。我们可以使用DateTimeFormatter,但它仅在Java8中可用。因此,如果年轻人使用Java 7或更低版本,就让他们不必费劲地学习。首先,年轻人应该使用Java 8(或更高版本),以尽可能接近他们的未来。第二,现代类在Java6和Java7到Java中都可用。