[英]LocalDate interval in Joda-time
我個人使用Guava的Range類。
它支持開放式范圍。 也可以指定包含或排除的邊界。 在眾多可能性中,這些可以容易地表示“在日期之前”或“在日期之后”。
開放式間隔的示例。
Range<LocalDate> before2010 = Range.atMost(new LocalDate("2009-12-31"));
Range<LocalDate> alsoBefore2010 = Range.lessThan(new LocalDate("2010-01-01"));
它還包含易於測試的謂詞,例如contains和containsAll,以及交叉操作。 所有這些測試和維護。
Interval類表示從一毫秒瞬間到另一個瞬間的時間間隔(完成時區)。 DateMidnight就是這樣一個瞬間。 所以你建議實現DateMidnights的間隔已經存在。
Interval i = new Interval(
new DateMidnight(2010, 3, 2), new DateMidnight(2010, 3, 5));
i.contains(new DateTime(2010, 3, 1, 23, 59, 59, 999)); // == false
i.contains(new DateTime(2010, 3, 2, 0, 0, 0, 0)); // == true
i.contains(new DateTime(2010, 3, 4, 23, 59, 59, 999)); // == true
i.contains(new DateTime(2010, 3, 5, 0, 0, 0, 0)); // == false
但是,您搜索的LocalDates間隔(也稱為部分(無時區))的概念尚不存在。 如果您要自己實現它,請不要實現任何間隔接口。 它會干擾你的願望,因為如前所述,它是基於瞬間的。
編輯:糟糕,以前誤解了。
不,我知道Joda Time沒有任何等價物。
就個人而言,我只是創建自己的類,其中包括開始和結束日期: LocalDateInterval
或類似的東西。 我不會重復使用Interval
,因為它會使概念混淆:一對LocalDate
值不代表兩個瞬間,因為本地日期實際上不是一個瞬間。
就個人而言,我沒有發現Interval
在Joda Time中特別有用......我一直在考慮從Noda Time中刪除它。 現在聽起來我不應該;)
請注意,使用DateMidnight
將在DST開關處失敗。 最好使用date.toDateTimeAtStartOfDay()
進行轉換。
我也需要LocalDate對象的間隔,但JodaTime不支持它。 所以我必須創建自己的實現。 后來我決定稍微打磨一下並開源。
你可以看一下: https : //github.com/serddmitry/joda-interval (可在Maven Central上找到)。
public class LocalDateInterval {
private LocalDate begin;
private LocalDate end;
public LocalDateInterval(LocalDate begin, LocalDate end) {
this.begin = begin;
this.end = end;
}
}
這適合我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.