1

アプリケーション内で日付を処理するためにJoda-Timeを使用していますが、当惑しました。2 つの文字列 (1 つは日付用、もう 1 つは時刻用) を使用して日付を生成する必要があります。

正規表現を使用して時刻を確保しましたが、正規表現を通過する日付がまだいくつかあります (たとえば、2 月 30 日など)。

try ブロック内で次の DateTime 構造を使用することを考えました (部分文字列が解析されたら)

DateTime(
    int year,
    int monthOfYear,
    int dayOfMonth,
    int hourOfDay,
    int minuteOfHour
)

そして、キャッチブロックで関数の例外をスローしますが、api docによると、このコンストラクターは、IllegalArgumentException他の一部のように、キャッチすると予想される例外をスローしません。

例外をスローできるように、MoY/DoM のカップルが有効なカップルを形成しているかどうかを知るためのポインターはありますか?

4

1 に答える 1

5

文書化されていませんが、値が無効な場合はorg.joda.time.IllegalFieldValueException(のサブクラス)がスローされます。IllegalArgumentExceptionサンプルコード:

import org.joda.time.*;

public class Test {
    public static void main(String[] args) {
        DateTime dt = new DateTime(2012, 2, 30, 0, 0);
        System.out.println(dt);
    }
}

結果:

Exception in thread "main" org.joda.time.IllegalFieldValueException: Value 30 for dayOfMonth must be in the range [1,29]
    at org.joda.time.field.FieldUtils.verifyValueBounds(FieldUtils.java:235)
    at org.joda.time.chrono.BasicChronology.getDateMidnightMillis(BasicChronology.java:605)
    at org.joda.time.chrono.BasicChronology.getDateTimeMillis(BasicChronology.java:177)
    at org.joda.time.chrono.AssembledChronology.getDateTimeMillis(AssembledChronology.java:133)
    at org.joda.time.chrono.ZonedChronology.getDateTimeMillis(ZonedChronology.java:119)
    at org.joda.time.chrono.AssembledChronology.getDateTimeMillis(AssembledChronology.java:133)
    at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:254)
    at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:195)
    at org.joda.time.DateTime.<init>(DateTime.java:307)
    at Test.main(Test.java:6)

明らかに、これが文書化されていればいいのですが...

于 2013-01-23T15:49:52.493 に答える