0

日付が文字列に格納されており、ISODateFormat で日付または曜日を表しているかどうかを検証する必要があります。

いずれかの形式であれば、文字列を使用できます。

2 つのフォーマッターを作成して文字列を渡し、両方が例外をスローする場所を確認して検証できます。

String date;
final DateTimeFormatter dateFormatter = ISODateTimeFormat.date();
final DateTimeFormatter weekdateFormatter = ISODateTimeFormat.weekDate();
boolean isDate=true,isWeekDate=true;

try {
      dateFormatter.parseDateTime(date);
}
catch (IllegalArgumentException e) {
      isDate =false;
}

try {
    weekdateFormatter.parseDateTime(date);
}
catch (IllegalArgumentException e) {
    isWeekDate =false;
}

if(!isDate && !isWeekDate)
    throw UserDefinedException(); 

それを行うより良い方法はありますか?

4

1 に答える 1

0

追加の方法

   /**
    * @return null if string is invalid
    */
   public static DateTime checkDate(String dateAsString, DateTimeFormatter formatter)
   {
      DateTime retVal = null;
      try {
         retVal = formatter.parseDateTime(dateAsString);
      } catch (IllegalArgumentException ex){
      }
      return retVal;
   }  

利用方法

   String date = "someString";
   if (checkDate(date, ISODateTimeFormat.date()) == null 
      || checkDate(date, ISODateTimeFormat.weekDate()) == null) 
   {
      throw new UserDefinedException();
   }  

または複数の形式のutilsメソッド

   /**
    * @return null if string is invalid
    */
   public static DateTime checkDate(String dateAsString,
                                   DateTimeFormatter[] formatters)
   {
      DateTime retVal = null;
      for (final DateTimeFormatter formatter : formatters)
      {
         try
         {
            retVal = formatter.parseDateTime(dateAsString);
         }
         catch (IllegalArgumentException ex)
         {
         }
         if (retVal != null)
         {
            break;
         }
      }
      return retVal;
   }
于 2013-01-16T10:54:55.567 に答える