2013-01-23 58 views
1

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

我已通过使用RegEx获得一天的时间,但仍有一些日期会通过我的RegEx(例如二月三十日)。

我想过使用下面的日期时间建设一个try块中(一旦子被解析)

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

,然后扔在catch块我功能的异常,但根据api doc,此构造没有按不会抛出我期望捕获的异常,就像其他人一样。

任何人都有任何指示,告诉MoY/DoM情侣是否构成一个有效的指示,以便能够抛出异常?

回答

4

尽管没有记录,但如果值无效,它将丢弃org.joda.time.IllegalFieldValueExceptionIllegalArgumentException的一个子类)。示例代码:

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) 

显然,如果这个记录它会很美好......

+0

谢谢您的回答:-) – FrenchFigaro