Java 带有两个日期的日期格式

Java 带有两个日期的日期格式,java,date,Java,Date,我正在将输入字符串转换为日期。当我尝试给出两个日期作为输入出生日期和加入日期,我没有得到任何满意的结果。如果输入无效,请帮助我重新提示。提前谢谢 public class EmployeeInfo { int id; static String name, DoBS, DoJS; Date DoB, DoJ; public void checkDate(String dt) throws ParseException { SimpleDateFormat sdf1 = new Sim

我正在将输入字符串转换为日期。当我尝试给出两个日期作为输入
出生日期
加入日期
,我没有得到任何满意的结果。如果输入无效,请帮助我重新提示。提前谢谢

public class EmployeeInfo {
int id;
static String name, DoBS, DoJS;
Date DoB, DoJ;

public void checkDate(String dt) throws ParseException {

    SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
    SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MMM-yyyy");
    SimpleDateFormat sdf3 = new SimpleDateFormat("dd MMMM yyyy");

    Date date = null;

    try {
        date = sdf1.parse(dt);
    } catch (ParseException e) {
        try {
            date = sdf2.parse(dt);
        } catch (ParseException e1) {
            try {
                date = sdf3.parse(dt);
            } catch (ParseException e2) {
                String invalid="Invalid,Retry";
                System.out.println(invalid);
                // TODO: Whatever to do when it doesn't find a date
            }
        }
    }

        setDateOfBirth(date);
        setDateOfJoining(date);
}


void setDateOfBirth(Date DoB) {
    this.DoB = DoB;
}

void setDateOfJoining(Date DoJ) {
    this.DoJ = DoJ;
}



void print() {
    System.out.println("User ID: " + id);
    System.out.println("Name: " + name);
    System.out.println("Date Of Birth: " + DoB);
    System.out.println("Date of Joining: " + DoJ);
}

public static void main(String[] args) throws ParseException {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter the name: ");
    name = scanner.nextLine();

    System.out.println("Enter the Date Of Birth: ");
    DoBS = scanner.nextLine();

    System.out.println("Enter the Date of Joining: ");
    DoJS = scanner.nextLine();

    EmployeeInfo e = new EmployeeInfo();

    e.checkDate(DoBS);
    e.checkDate(DoJS);
    e.print();

}
}

所以我去帮你修好了,虽然有点乱,但效果很好 首先,您应该将EmployeeInfo作为单独的类 EmployeeInfo.java

public class EmployeeInfo {
    int id;
    static String name;
    Date DoB, DoJ;

    public void setName(final String name) {
        this.name = name;
    }

    public void setDateOfBirth(final Date DoB) {
        this.DoB = DoB;
    }

    public void setDateOfJoining(final Date DoJ) {
        this.DoJ = DoJ;
    }

    void print() {
        System.out.println("User ID: " + id);
        System.out.println("Name: " + name);
        System.out.println("Date Of Birth: " + DoB);
        System.out.println("Date of Joining: " + DoJ);
    }
}
然后你应该有你的主类,运行和所有的逻辑 Main.java

public class Main {    
    public static Date checkDate(final String dt) throws ParseException {

        final SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
        final SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MM-yyyy");
        final SimpleDateFormat sdf3 = new SimpleDateFormat("dd MM yyyy");

        Date date = null;

        try {
            date = sdf1.parse(dt);
        } catch (final ParseException e) {
            try {
                date = sdf2.parse(dt);
            } catch (final ParseException e1) {
                try {
                    date = sdf3.parse(dt);
                } catch (final ParseException e2) {
                    final String invalid = "Invalid,Retry";
                    System.out.println(invalid);
                }
            }
        }
        return date;
    }

    public static void main(final String[] args) throws ParseException {
        final Scanner scanner = new Scanner(System.in);
        final EmployeeInfo e = new EmployeeInfo();
        System.out.println("Enter the name: ");
        e.setName(scanner.nextLine());
        Date d = null;
        while (d == null) {
            System.out.println("Enter the Date Of Birth: ");
            d = checkDate(scanner.nextLine());
        }
        e.setDateOfBirth(d);
        d = null;
        while (d == null) {
            System.out.println("Enter the Date of Joining: ");
            d = checkDate(scanner.nextLine());
        }
        e.setDateOfJoining(d);

        e.print();

    }
}

希望这能让你对如何做到这一点有所了解。我恳请您比较两个源代码,您的amd和我的amd,并尝试了解发生了什么变化,并尝试找出原因(您自己)。

您不需要在
try中
try
输入的是姓名、出生日期和加入日期。我想把这些东西印回去。日期验证是最重要的。如果您使用“tryParse”或类似的方法,代码会更“酷”that@cricket_007
try
内的
try
用于检查不同的日期格式。
setDateOfBirth(date);加入的设定日期(日期)可能是问题所在,因为日期始终相同..当我输入有效日期时,会发生异常。。为什么?只是注意到,日期格式毫无意义。更新代码我认为这不是错误。。
d=checkDate(scanner.nextLine())中的某物在main方法中。@AjnasO For mee它工作正常,请参见输出:输入姓名:karel输入出生日期:10-10/1856无效,重试输入出生日期:10-10-1856输入加入日期:10/10/1845用户ID:0姓名:karel出生日期:周五10月10日00:00:00 CET 1856加入日期:周五10月10日00:00:00 CET 1845如果您有na错误,请提供stact traceEnter姓名:Ajnas输入出生日期:28/04-1996无效,重试输入出生日期:1996年4月28日线程“main”中的异常java.lang.ClassCastException:java.util.Date不能在Employee.Main1.checkDate(Main1.java:18)在Employee.Main1.main(Main1.java:45)转换为java.sql.Date这是遇到的错误。已尝试
printstacktrace()仍然相同。。