-2

I am trying to build a program that asks a user for their DOB and will throw an error if not in the DD/MM/YYYY format. Does anyone know how to make that happen? I apologize if I didn't do enough research but I couldn't really find anything about formatting the input for a date. Thank you for your help.

Tyler1621
  • 19
  • 3
  • Possible duplicate of [Java: Check the date format of current string is according to required format or not](https://stackoverflow.com/questions/20231539/java-check-the-date-format-of-current-string-is-according-to-required-format-or). Getting a String from the user is common enough that you can find info on how to do that as well. – takendarkk Mar 12 '19 at 16:05
  • Parse the string as a date and catch the parse exception. – Andreas Mar 12 '19 at 16:05
  • "and will throw an error if not in the DD/MM/YYYY format" in that case simply accept user data as string, then check if it matches `dd/dd/dddd` where `d` is digit. You are use regex for that, or if you want to check if not only format is correct but also content you can try parsing this string into actual date. – Pshemo Mar 12 '19 at 16:05
  • 1
    *"I couldn't really find anything about formatting the input for a date"* That is because you don't *format* the input, you *parse* it. Try searching for that instead. – Andreas Mar 12 '19 at 16:07
  • @takendarkk Yes getting a string is easy to do, what I am trying to get is a string formatted a specific way. It doesn't appear that anything in that link addresses that. – Tyler1621 Mar 12 '19 at 16:29
  • @Andreas I might have used the wrong language when asking the question. My apologies. I will look under parsing the string instead. – Tyler1621 Mar 12 '19 at 16:31

3 Answers3

-1
boolean isDOB(String input) {
        String[] inputs = input.split("/");
        if(inputs.length!=3)
            return false;
        int days = Integer.parseInt(inputs[0]);
        int month = Integer.parseInt(inputs[1]);        
        if(days>31 || month>12 || inputs[2].length()!=4) {
            return false;           
        }
        return true;        
    }
Mahdi Khardani
  • 52
  • 1
  • 10
-1

You need to process the input after it's read. Regular expressions are very efficient in this task. ^\\d{2}/\\d{2}/\\d{4}$ will check that the user supplied string is in DD/MM/YYYY.

So, you could compare the user input as follows:

if(userStr.matches("^\\d{2}/\\d{2}/\\d{4}$")){
    //Do stuff if input is good
}else{
    //Do stuff if input is bad
}
corporateWhore
  • 617
  • 2
  • 12
  • 23
-1

Here is the entire program if this helps you. This also validates the date using DateTimeFormatter. So, if user enters 32/01/2000, it fails.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Scanner;

public class DateOfBirth {
    public static void main(String[] args) {
        System.out.println("Please enter your DOB");
        Scanner myScanner = new Scanner(System.in);
        String input = myScanner.next();
        while (!validDate(input)) {
            System.out.println("ERROR: Invalid date. Please enter your DOB");
            input = myScanner.next();
        }
        myScanner.close();
    }

    private static boolean validDate(String input) {
        try {
            DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("dd/MM/yyyy");
            LocalDate.parse(input, inputFormat);
        } catch (DateTimeParseException e) {
            return false;
        }
        return true;
    }
}
Prasann
  • 1,263
  • 2
  • 11
  • 18
  • Down voter - can you tell me why you have down voted this? Do you see any issue with this solution? – Prasann Mar 13 '19 at 12:11