2011-09-24 16 views
0

Java Dateformat - 入力を特定の形式と比較し、一致する形式に基づいて入力を解析できますか?たとえば

ユーザーは、私が(MM/DD/YYYY)のような形式の2種類を書くためにDateFormatを使用する方法1983年1月23日または1983年1月23日

を入力することができますし、 (M/DD/YYYY)と比較して実際の日付と比較し、どの日付が日付と一致するかを確認してください。

+2

最初にあなたが投稿持っている形式の文字列でのSimpleDateFormatオブジェクトを作成することによって、それをテストし、両方のテスト文字列を解析してみてください。あなたはうれしく驚くかもしれません。 –

+0

年のyと曜日の小文字は「MM/dd/yyyy」です。なぜSimpleDateFormatクラスのAPIがこれが重要なのかを教えてくれます。 –

答えて

1

ヨハンは誤った解決策を投稿したため、正しい投稿を投稿する必要があります。 "MM/dd/yyyy"はテスト文字列の両方をフォーマットします:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateFormatTest { 
    public static void main(String[] args) { 
     String[] tests = {"01/23/1983", "1/23/1983", "1/3/1983"}; 

     String formatString = "MM/dd/yyyy"; 

     SimpleDateFormat sdf = new SimpleDateFormat(formatString); 

     for (String test : tests) { 
     Date date = null; 
     try { 
      date = sdf.parse(test); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(date); 
     } 
    } 
} 
2

複数の入力フォーマットを扱う場合の共通の解決策は、一連の期待されるフォーマットをループで成功させるか、すべて失敗するまで試すことです。例:

public Date parseDate(List<DateFormat> formats, String text) { 
    for(DateFormat fmt : formats) { 
     try { 
      return fmt.parse(inputDate); 
     } catch (ParseException ex) {} 
    } 
    return null; 
} 

List<DateFormat> formats = Arrays.asList(new SimpleDateFormat("MM/dd/yyyy")); 
Date d1 = parseDate(formats, "01/23/1983"); 
Date d2 = parseDate(formats, "1/23/1983"); 
+0

必要はありません。間違っています。元の投稿への私のコメントを見てください。このコードを実行するとどうなりますか? –

+0

ああ、あなたはddとyyyyを小文字に編集しましたが、あなたはまだ不必要な冗長性を持っています。ここでも、1つしか必要ないときにSimpleDateFormatの配列リストを使う必要があるのはなぜですか? –

+0

@Eels、そうです、この特殊なケースでは冗長です。それにもかかわらず、複数のフォーマットを扱う際の共通のアプローチです。 –

関連する問題