2

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 で簡単にできることですか? それとも、特定の時間間隔でハンドローリングを行うために多くのロジックが必要ですか?

4

2 に答える 2

0

間隔が必要なようですね: http://joda-time.sourceforge.net/apidocs/org/joda/time/Interval.html

そして、minusdaysメソッドを使用します。(はい、簡単です。バニラの Java 日付/カレンダーと比較すると非常に簡単です)

時刻を取得するには:

int hour = dt.getHourOfDay();
int min = dt.getMinuteOfHour();
int sec = dt.getSecondOfMinute();
于 2013-06-18T14:29:58.000 に答える