あなたがjava.util.Dataへの参照を使用したくない場合は、あなたはこのようにそれを行う必要があるでしょう:
public DateTime getDateTime(String text) {
DateTimeFormatterBuilder fb = new DateTimeFormatterBuilder();
fb.appendDayOfMonth(2);
fb.appendLiteral('.');
fb.appendMonthOfYear(2);
fb.appendLiteral('.');
fb.appendYear(2, 4);
DateTimeFormatter formatter = fb.toFormatter();
DateTime dt = formatter.parseDateTime(text);
if (dt.getYear() < 2000) {
dt = dt.plusYear(2000);
}
return dt;
}
をしかし、私は、このソリューションをお勧めします:
public DateTime getDateTime(String text) {
SimpleDateFormat f = new SimpleDateFormat("dd.MM.yy");
java.util.Date jud = f.parse(text);
if (jud != null) {
return new DateTime(jud);
} else {
return null;
}
}
両方とも、あなたの例のためのトリックと仕事をする必要があります。
注:Alberto氏によると、まず正規表現を使用して入力を検証する必要があります。なぜなら、SimpleDateFormatはこの使用法と非常によく一致していないため、入力を検証することが常に望ましいからです。
私はより良い方法についてはわかりませんが、プログラムフローの一部として例外に頼ることはベストプラクティスに反していると警告したいだけです。それはパフォーマンスに害を及ぼします。 – Vic
ありがとう、 '#setLenient'はとても役に立ちます。それは分かりませんでした:)私はあなたにスタイルの質問をしてもらえますか? 'Arrays.asList(" dd/MM/yy "、" yyyy/MM/dd "、" dd/MM/yyyy ")'や 'new Object [] {..}'や、 '#split()'メソッドを使用していますか?それほど高価ではないですか? – codevour
私はより簡潔なので分割が好きです。その高価ですが、定数を使用するのは簡単なので、起動時に一度しか実行されません。 SimpleDateFormatの作成は、これらを作成する方がはるかに高価であるため、より重要です。 –