我正在使用 Joda-Time 来处理应用程序中的日期,并发现自己感到困惑。 我需要使用两个字符串生成一个日期(一个用于日期,一个用于一天中的小时)。
我通过使用RegEx确保了一天中的时间,但仍有一些日期通过我的RegEx(例如2月30日)。
我考虑在try块中使用以下DateTime构造(一旦解析了子字符串)
DateTime(
int year,
int monthOfYear,
int dayOfMonth,
int hourOfDay,
int minuteOfHour
)
然后在catch块中抛出我的函数的Exception,但根据api doc,这个构造函数不会抛出我期望捕获的IllegalArgumentException
异常,就像其他人一样。
任何人都有指示告诉MoY / DoM夫妇是否形成有效的一对以便能够抛出异常吗?
答案 0 :(得分:4)
虽然没有记录,但如果值无效,它将抛出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)
显然,如果记录
,那就太好了。