Joda Time で人間中心のスタイルの期間に到達する簡単な方法はありますか?
たとえば、過去 4 日間が必要な場合は、丸 3 日間の期間 (または間隔の方が適している可能性があります) と、現在進行中の日から現在の時刻までを指定します。したがって、現在の時刻までの間隔は 1 日、1 日、1 日、n ミリ秒になると思います。
または、過去 5 週間については、丸 4 週間と、現在進行中の週から現時点までを教えてください。
私はこれにしばらく時間を費やしましたが、難しいのは、期間の終わりの人間の定義に期間を「正規化」しようとすることです。したがって、日ごとの場合は、1 日の始まり (常に真夜中) に正規化し、それから現在までの間隔を見つける必要があります。非常にトリッキーな月の場合、月の初めに正規化して現在に移動する必要があります...など。これをさらに困難にするために、期間固有の正規化ロジックを使用して巨大なケースステートメントを作成しないようにしていますそして、私は一般的なアプローチを見つけようとして頭を悩ませています。
これが私の現在のコードです(Groovyで)
static List generatePreviousIntervals(BaseSingleFieldPeriod period,
int count,
DateTime end = DateTime.now()) {
if (count < 1) {
return []
}
def intervals = []
Interval last
count.times {
def finish = last?.start ?: end
def next = new Interval(period, finish)
intervals.add(next)
last = next
}
// reverse so intervals are in normal progression order
intervals.reverse()
}
それは Joda Time で簡単にできることですか? それとも、特定の時間間隔でハンドローリングを行うために多くのロジックが必要ですか?