2014-10-30 117 views
5

我使用Joda時間庫在此庫中使用parseDateTime函數將字符串解析爲dateTime,並注意到該庫支持的日期範圍是-292,269,054至292,277,023。Joda Time中的限制日期範圍

任何人都可以知道如何限制使用此庫的日期範圍。特別是年(YYYY)到9999?

謝謝。

+2

我不會認爲圖書館的要求(或責任)會根據您的需求提供該功能 - 請注意,您可以自己實施其中一個日期類... – MadProgrammer 2014-10-30 05:23:15

回答

1

由於MadProgrammer評論說,限制日期範圍是您作爲應用程序開發人員的工作。 Joda-Time不知道你認爲是合理的限制。

Bean驗證

爲了幫助驗證數據的苦差事,你可能會發現Bean Validation規範有用。由JSR 303(spec 1.0)和JSR 349spec 1.1)

隨着Bean驗證,就可以方便地使用註解來定義規則,例如在一類特定的成員變量最小值和最大值定義。

0

我不知道,但你可以用這個代碼測試

DateTime startRange = new DateTime(2010, 1, 1, 12, 0, 0, 0); 
DateTime endRange = new DateTime(9999, 12, 31, 21, 59, 59, 59); 
Interval interval = new Interval(startRange, endRange); 
DateTime testRange = new DateTime(2014, 10, 30, 11, 0, 0, 0); 
System.out.println(interval.contains(testRange)); // returns true 

endRange = new DateTime(2014, 12, 31, 21, 59, 59, 59); 
testRange = new DateTime(9999, 10, 30, 11, 0, 0, 0); 
System.out.println(interval.contains(testRange)); // returns false 
1

喬達時間出奇的提供你想要的東西的明顯的解決方案是使用LimitChronology一個例子(真的嗎?):

DateTime min = new DateTime(2014, 1, 1, 0, 0); 
DateTime max = new DateTime(2015, 1, 1, 0, 0).minusMillis(1); 
Chronology chronology = 
    LimitChronology.getInstance(ISOChronology.getInstance(), min, max); 

DateTime now = DateTime.now(chronology); 
System.out.println(now.toString(DateTimeFormat.fullDateTime())); 
// output: Donnerstag, 6. November 2014 19:08 Uhr MEZ 

DateTime test = new DateTime(1970, 1, 1, 0, 0).withChronology(chronology); 
System.out.println(test.toString(DateTimeFormat.fullDateTime())); 
// no exception! => output: �, �. � ���� ��:�� Uhr MEZ 

test = now.withYear(1970); 
// IllegalArgumentException: 
// The resulting instant is below the supported minimum of 
// 2014-01-01T00:00:00.000+01:00 (ISOChronology[Europe/Berlin]) 

但是,我的建議是不使用此功能。

第一個原因是在程序中的每個DateTime對象上應用LimitChronology不便。可能你會被迫改變你的應用程序架構來安裝一箇中央工廠來生產這種異國情調的DateTime-對象,以確保你真的不會忘記任何對象。

另一個原因是有關年表的部分不可靠性。它不能阻止在支持的有限範圍之外實例化DateTime對象,但會產生奇怪的格式化輸出(請參見上面的示例)。

因此,我建議您按照@MadProgrammer或@CharlieS的建議使用Interval進行範圍檢查。