1

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

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

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

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

然后在 catch 块中抛出我的函数的异常,但根据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 回答