使用SimpleDateFormat进行日期格式化

时间:2017-08-01 09:19:35

标签: java validation date

此处用户需要输入姓名,出生日期和加入日期。该程序需要检查输入的日期是否对任何给定的3种格式dd/MM/yyyydd-MMM-yyyydd 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();
}
}

2 个答案:

答案 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;
}