簡體   English   中英

Joda-time中的LocalDate間隔

[英]LocalDate interval in Joda-time

Joda-time有一個Interval類,它是DateTime之間的范圍。 什么可以用於一系列的LocalDate

我想要一個對象,例如“從2011年1月1日到10/1/2011”,沒有時間(或時區)進入圖片。

據我所知,joda-time沒有內置任何東西。 如果它沒有任何東西,我們創造它,它應該是什么樣子? 最重要的是,joda-time的哪些接口可以實現最佳集成到其他類型,與joda-time設計保持一致? 它是否有意義實現ReadableInterval ,其中getStartgetEnd返回DateMidnight

我個人使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM