:Java Dateformat - 入力を特定の形式と比較し、一致する形式に基づいて入力を解析できますか?たとえば
ユーザーは、私が(MM/DD/YYYY)のような形式の2種類を書くためにDateFormatを使用する方法1983年1月23日または1983年1月23日
を入力することができますし、 (M/DD/YYYY)と比較して実際の日付と比較し、どの日付が日付と一致するかを確認してください。
:Java Dateformat - 入力を特定の形式と比較し、一致する形式に基づいて入力を解析できますか?たとえば
ユーザーは、私が(MM/DD/YYYY)のような形式の2種類を書くためにDateFormatを使用する方法1983年1月23日または1983年1月23日
を入力することができますし、 (M/DD/YYYY)と比較して実際の日付と比較し、どの日付が日付と一致するかを確認してください。
ヨハンは誤った解決策を投稿したため、正しい投稿を投稿する必要があります。 "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);
}
}
}
複数の入力フォーマットを扱う場合の共通の解決策は、一連の期待されるフォーマットをループで成功させるか、すべて失敗するまで試すことです。例:
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");
必要はありません。間違っています。元の投稿への私のコメントを見てください。このコードを実行するとどうなりますか? –
ああ、あなたはddとyyyyを小文字に編集しましたが、あなたはまだ不必要な冗長性を持っています。ここでも、1つしか必要ないときにSimpleDateFormatの配列リストを使う必要があるのはなぜですか? –
@Eels、そうです、この特殊なケースでは冗長です。それにもかかわらず、複数のフォーマットを扱う際の共通のアプローチです。 –
最初にあなたが投稿持っている形式の文字列でのSimpleDateFormatオブジェクトを作成することによって、それをテストし、両方のテスト文字列を解析してみてください。あなたはうれしく驚くかもしれません。 –
年のyと曜日の小文字は「MM/dd/yyyy」です。なぜSimpleDateFormatクラスのAPIがこれが重要なのかを教えてくれます。 –