此处用户需要输入姓名,出生日期和加入日期。该程序需要检查输入的日期是否对任何给定的3种格式dd/MM/yyyy
,dd-MMM-yyyy
和dd MMMM yyyy
有效。如果无效,用户需要重新输入。最后,我想打印一个自动增量ID,名称,出生日期和加入日期。你能帮我解决这个问题。我找不到任何异常处理的解决方案。提前谢谢。
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;
if (date == sdf1.parse(dt))
try {
date = sdf1.parse(dt);
}
catch (ParseException e) {
e.printStackTrace();
DoB=date;
}
else if (date == sdf2.parse(dt))
try {
System.out.println("hsd");
date = sdf2.parse(dt);
}
catch (ParseException e) {
e.printStackTrace();
}
else if(date==sdf3.parse(dt))
{
try{
date=sdf3.parse(dt);
}
catch(ParseException e){
e.printStackTrace();
}
}
{
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.print();
}
}
答案 0 :(得分:0)
至于日期的实际检查,如果你只想支持这三种日期格式,你可以简单地使用三个嵌套的try catch语句。像这样:
try {
date = sdf1.parse(dt);
} catch (ParseException e) {
try {
date = sdf2.parse(dt);
} catch (ParseException e1) {
try {
date = sdf3.parse(dt);
} catch (ParseException e2) {
// TODO: Whatever to do when it doesn't find a date
}
}
}
如果你想要一个更动态的方法,你可以将SimpleDateFormat对象放在一个数组中,并使用一个带有try-catch的循环。
编辑:
好吧,你想要做的是让checkDate
方法返回一个Date对象。如果它无法解析三种格式的日期,则返回null或抛出异常。输入日期时,您希望使用checkDate
方法检查日期是否有效,并使用户重新输入(如果它无效)。
关于您的代码的一些注意事项:
在Java中,类的字段通常是私有的,使用getter和setter方法来控制它们 - 这称为封装
静态字段适用于所有实例中相同的变量。特定于一个EmployeeInfo对象的名称和日期不应该是静态的。您应该创建一个EmployeeInfo对象,然后设置对象的相应值
通常的做法是将所有方法设置为私有或公共(或在继承的情况下受保护),具体取决于其预期用途。
我建议你阅读一些关于Java中OOP基础知识的内容。
答案 1 :(得分:0)
您在问题中提出了几个问题但是关于日期问题,您可以像下面这样实现:
private static final List<DateFormat> ORDERED_FORMATS = Arrays.asList(new SimpleDateFormat("dd/MM/yyyy"),new SimpleDateFormat("dd-MMM-yyyy"),new SimpleDateFormat("dd MMM yyyy"));
public static Date parseDate(String date) {
for(DateFormat format : ORDERED_FORMATS){
Date result = tryParse(date, format);
if(result != null){
return result;
}
}
throw new IllegalArgumentException("Could not parse "+date);
}
private static Date tryParse(String date, DateFormat format){
try{
return format.parse(date);
} catch (ParseException e) {
System.out.println("Too bad : "+e.getMessage());
}
return null;
}