2013-01-23 83 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