2017-08-02 103 views
-1

我输入的字符串转换为日期格式。当我尝试给出两个日期作为输入Date of BirthDate of Joining,我没有得到任何满意的结果。如果输入无效,也可以帮助我重新提示。提前致谢。日期有两个日期

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(); 

} 
} 
+0

你不需要内为''try' try' –

+0

输入的姓名,出生日期和加入的日期。我想把这些东西打印回来。日期验证的东西.. –

+1

代码将是这样多少“冷”,如果你有使用一些方法“的TryParse”或类似的东西 – 2017-08-02 11:31:02

回答

0

于是我就和它固定为你,它有点砍死在一起,但工作得很好 首先,你应该有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(); 

    } 
} 

希望这个主类让你了解它是如何完成的。我恳求你比较两个源代码,你的和我的,并试图理解什么已经改变,并试图找出原因(在你自己)。

+0

当我输入一个有效的日期,异常发生..为什么如此? –

+0

刚注意到,日期格式没有任何意义。更新代码 – PanBrambor

+0

我认为这不是错误..在'd = checkDate(scanner.nextLine());'在主要方法中的东西。 –