Joda DateTime 非法值

Fre*_*aro 1 java exception-handling jodatime

我正在使用Joda-Time处理应用程序中的日期,但发现自己很困惑。我需要使用两个字符串(一个用于日期,一个用于一天中的小时)生成一个日期。

我通过使用 RegEx 确保了一天中的时间,但仍有一些日期通过我的 RegEx(例如 2 月 30 日)。

我想过在 try 块中使用以下 DateTime 构造(一旦解析了子字符串)

DateTime(
    int year,
    int monthOfYear,
    int dayOfMonth,
    int hourOfDay,
    int minuteOfHour
)
Run Code Online (Sandbox Code Playgroud)

然后在 catch 块中抛出我函数的 Exception ,但根据api doc,这个构造函数不会IllegalArgumentException像其他一些人那样抛出我期望捕获的异常。

任何人都有任何指针来判断 MoY/DoM 对是否形成有效的一对以便能够抛出异常?

Jon*_*eet 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

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)
Run Code Online (Sandbox Code Playgroud)

显然,如果这记录下来会很好......