java - 检查 3 个整数中的出生日期是否有效 (mm/dd/yyyy)

标签 java date format

我制作了一个扫描仪,要求输入 3 个整数:出生月/日/年 对于每个整数,我检查这是否是有效条目(即月 <12 和月 >0)。 如果三个主菜有效,我会做一个:

System.out.println(month + "-" + day + "-" + year);

完整代码如下:

// TODO code application logic here
    Scanner sc = new Scanner(System.in);
    int intJour;
    int intMois;
    int intAnnee;

    do {
        System.out.println("Year of birth :");
        intJour = sc.nextInt();
        sc.nextLine();
    } while (intJour < 0 || intJour > 31);

    do {
        System.out.println("Month of birth :");
        intMois = sc.nextInt();
        sc.nextLine();
    } while (intMois < 0 || intMois > 12);

    do {
        System.out.println("Year of birth :");
        intAnnee = sc.nextInt();
        sc.nextLine();
    } while (intAnnee < 0 || intAnnee > Calendar.getInstance().get(Calendar.YEAR));

    System.out.println("Birth date: " + intJour + "-" + intMois + "-" + intAnnee);

我想根据用户输入确定一个日期,并检查该日期是否存在。 I.E 并非每个月都有 31 关于所涉及的年份。

最佳答案

如果你想这样做,你必须颠倒问题的顺序:问第一年,之后问月,最后问日。通过这种方式,您将能够在用户输入之前知道是否满足所有可能的条件(即:闰年的 2 月 29 日或有 31 天的月份)。

此外,要最终检查日期是否正确,请使用例如 SimpleDateFormat .

final static String DATE_FORMAT = "dd-MM-yyyy";

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int intJour;
    int intMois;
    int intAnnee;

    do {
        System.out.println("Veuillez entrer votre année de naissance :");
        intAnnee = sc.nextInt();
        sc.nextLine();
    } while (intAnnee < 0 || intAnnee > Calendar.getInstance().get(Calendar.YEAR));

    do {
        System.out.println("Veuillez entrer votre mois de naissance (de 01 à 12) :");
        intMois = sc.nextInt();
        sc.nextLine();
    } while (intMois < 0 || intMois > 12);

    do {
        System.out.println("Veuillez entrer votre jour de naissance (de 01 à 31) :");
        intJour = sc.nextInt();
        sc.nextLine();
    } while (!isDateValid(intAnnee, intMois, intJour));

    System.out.println("Confirmation de votre année de naissance: " + intJour + "-" + intMois + "-" + intAnnee);
    sc.close();
}

public static boolean isDateValid(int year, int month, int day) 
{
        try {
            DateFormat df = new SimpleDateFormat(DATE_FORMAT);
            df.setLenient(false);
            df.parse(day + "-" + month + "-" + year);
            return true;
        } catch (ParseException e) {
            return false;
        }
}

输出:

Veuillez entrer votre année de naissance :
2012
Veuillez entrer votre mois de naissance (de 01 à 12) :
30
Veuillez entrer votre mois de naissance (de 01 à 12) :
02
Veuillez entrer votre jour de naissance (de 01 à 31) :
30
Veuillez entrer votre jour de naissance (de 01 à 31) :
30
Veuillez entrer votre jour de naissance (de 01 à 31) :
30
Veuillez entrer votre jour de naissance (de 01 à 31) :
10
Confirmation de votre année de naissance: 10-2-2012

关于java - 检查 3 个整数中的出生日期是否有效 (mm/dd/yyyy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718769/

相关文章:

java - JButton更新标签

java - 对于循环和charAt问题,尝试确定字符串是否为数字

php - strftime 得到错误的日期

java - 通过更改系统日期,我们可以打破时间到期限制

command-line - 如何从命令行更改日期格式?

java - ActiveMQ http 连接错误

java - 使用静态类型是个好主意吗?

java - 与 Bash 相比,Java 中的语言环境区分大小写不一致

c# - 解析和格式化最小/最大日期值 - 用于elasticsearch聚合

date - 如何在 DOS 批处理文件中获取 mm-dd-yyyy?