1

キーボードからの文字列に、特定の月ごとに正しい月数、日、およびうるう年を調整した mm/dd/yyyy 形式の有効な日付が含まれているかどうかをテストするための正しいコードを記述しようとすると、問題が発生します。これまでのところ、私は近くにいるとは思いませんが、どんな助けでも大歓迎です。前もって感謝します

/* read a date from a string from the keyboard to determine if date is in mm/dd/yyyy format.

 */
import java.util.Scanner;

public class DateFormat

{

public static void main(String [ ] args)

{

   Scanner inp = new Scanner(System.in);

   System.out.println("Enter the date in mm/dd/yyyy format. ");

    int mm;

    int dd;

    int yy;

    int date = inp.nextInt();

    boolean isLeapYear;

        if ((mm <1) && (mm >12))

            System.out.println( date + " is not valid month must be between 1 and 12.");
       if (( mm = 4) &&  ( dd <=30 ))
            System.out.println( date + " is a valid date."); 
            }
                else 
                    System.out.println(date + " is not valid date must have 30 or less days. ");
         if (date = mm + "/" + dd + "/" + yy);
            System.out.println( date + " is a valid date format. ");
        }
        else{
            System.out.println( date + " is not valid must be in dd/mm/yyyy format.");

            if (yy %100 ==0) {
          if (yy % 400 ==0){
              isLeapYear = true;
          }    
          else{
              isLeapYear = false;
          }   
        }  
        else{
            if (yy %4 ==0){
             isLeapYear = true;
            }
            else{
             isLeapYear = false;

           if (isLeapYear)
           if ((mm ==2) && (dd <= 29 ))
            System.out.println(date + " is a valid date.");
           }
           else{
               System.out.println( date + "is not valid month must have 29 days or less.");
            if ((mm ==2) && (dd<=28))
                System.out.println( date + "  is a valid date.");
            }
            else{
                System.out.println( date + "is not valid must have 28 days or less. ");
4

1 に答える 1

4

これが役立つと思います: http://www.javadb.com/check-if-a-string-is-a-valid-date

基本的に、日付が有効かどうかをチェックするコードを書く必要はありません。たとえば、java.text パッケージの SimpleDataFormat クラスを使用できます。

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Valid? " + isValidDate(scanner.nextLine()));
}

private boolean isValidDate(String inDate) {

    if (inDate == null)
      return false;

    //set the format to use as a constructor argument
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    if (inDate.trim().length() != dateFormat.toPattern().length())
      return false;

    dateFormat.setLenient(false);

    try {
      //parse the inDate parameter
      dateFormat.parse(inDate.trim());
    }
    catch (ParseException pe) {
      return false;
    }
    return true;
  }
于 2009-11-28T16:46:54.073 に答える