简体   繁体   中英

enforcing specific date format in java

In my java program a java variable String inputDate accepts input form user. I want to enforce users to enter date in (dd/MM/yyyy) format only as my other modules depend on that format only. Here's what I tried so far:

public class InputQuery {

private static String FLIGHT_DATE;

public String getFLIGHT_DATE() {
    return FLIGHT_DATE;
}

public void setFLIGHT_DATE() {

    boolean invalid = true;
    Scanner sc = null;
    while(invalid){
        System.out.println("Enter FLIGHT_DATE(dd/MM/yyy) :");
        sc = new Scanner(System.in);
        FLIGHT_DATE = sc.nextLine();
        if( (invalid = isValidDate(FLIGHT_DATE)) ) {
            System.out.println("For Feb 21,2016 enter 21/02/2016");
        }
    }
    sc.close();
}

private boolean isValidDate(String flight_DATE) {
    SimpleDateFormat myDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    if( flightDate.parse(flight_DATE)){
       System.out.println("accepted OK");
       return true;
    }
    return false;
}

Use myDateFormat.setLenient(false) .

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    sdf.setLenient(false);
    try{
        sdf.parse(incomingDateString);
        // if you get here, the incomingDateString is valid
    }catch(ParseException ex){
        // if you get here, the incomingDateString is invalid
    }

This won't work, try this

private boolean isValidDate(String flightDate) {
    SimpleDateFormat myDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    myDateFormat.setLenient(false);
    try {
        myDateFormat.parse(flightDate);
    } catch (ParseException e) {
        return false;
    }
    System.out.println("accepted OK");
    return true;
}

To my understanding, what you'd like to do is to ensure that the date entered corresponds to the format.

The parse(String) method doesn't return a boolean, and it never returns null . If it's successful, it returns a date; if it's unsuccessful, it throws an exception. The way to do this is:

private boolean isValidDate(String flight_DATE) {
    SimpleDateFormat myDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    try {
        myDateFormat.parse(flight_DATE);
        return true;
    } catch (ParseException ex) {
        // You may want to print the exception here, or do something else with it
        return false;
    }
}

You can use regex to check given input is in format or not try this:

public class DateValidator {

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String flightDate = null;
        boolean isDateValid = false;

        while(!isDateValid){
            System.out.print("Enter FLIGHT_DATE(dd/MM/yyy) :");
            flightDate = scanner.nextLine().trim();
            isDateValid = isDateValid(flightDate);
            if(!isDateValid){
                System.out.println("Wrong Format.");
            }
        }
        System.out.println("continue.");
    }

    public static boolean isDateValid(String flightDate){
        String regex = "^\\d{2}/\\d{2}/\\d{4}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(flightDate);
        return matcher.find();
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM