曜日ごとに範囲内の日付を見つけるGroovyの方法

ミコール

以下のJodaTimeの例を達成するためのGroovyの方法は何でしょうか。

LocalDate startDate = new LocalDate(2016, 11, 8);
LocalDate endDate = new LocalDate(2017, 5, 1);

LocalDate thisMonday = startDate.withDayOfWeek(DateTimeConstants.MONDAY);

if (startDate.isAfter(thisMonday)) {
    startDate = thisMonday.plusWeeks(1); // start on next monday
} else {
    startDate = thisMonday; // start on this monday
}

while (startDate.isBefore(endDate)) {
    System.out.println(startDate);
    startDate = startDate.plusWeeks(1);
}

そして、週の1日以上、たとえば月曜日と火曜日はどうでしょうか。

バルログ

開始日と終了日のパラメーターを考えると、次のGroovyコード(GroovyDate.parse()Date.format()ミックスイン関数、GroovyのDate + int追加、強制StringへのGroovy int、および少しの代数を使用)がうまくいくようです。

Date startDate = Date.parse("yyyy-MM-dd","2016-11-08")
Date endDate = Date.parse("yyyy-MM-dd","2017-05-01")

Date mondayStart = startDate + 6 - ((5 + (startDate.format("u") as int)) % 7)

while (mondayStart < endDate) {
    println mondayStart
    mondayStart += 7
}

そうは言っても、while下部ループは一種の...「オープンエンド」です。GroovyのRangeリテラル構文とList.step()ミックスイン関数を使用すると、より分析的に同等のものを取得できます。以下は上記ループのみを置き換えwhileます。

(mondayStart..<endDate).step(7) { stepDate ->
    println stepDate
}

パート2:月曜日以上

他の曜日で作業するに5は、mondayStart割り当ての定数曜日に基づいた適切な部分式に置き換える必要があります。幸い、次の式は非常にうまく機能します。

7 - Calendar."${weekDay.toUpperCase()}"

全体をまとめて少しマッサージすると、次のようになります。

def weekDaysInDateRange(Date startDate, Date endDate, String weekDay = "monday") {
    startDate = startDate.clearTime()
    endDate = endDate.clearTime()
    def offset = 7 - Calendar."${weekDay.toUpperCase()}"
    def startDOW = startDate.format("u") as int
    def weekDayStartDate = startDate + 6 - (offset + startDOW) % 7

    (weekDayStartDate..<endDate).step(7) { stepDate ->
        println (stepDate.format("yyyy-MM-dd"))
    }
}

その関数を定義すると、次のテストコードが表示されます。

def now = new Date()
def nextMonthIsh = new Date() + 30
println "$now --> $nextMonthIsh"
println "============================================================="

["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]
.each { weekDay ->
    println """
$weekDay
=========="""
    weekDaysInDateRange(now, nextMonthIsh, weekDay)
}

次の結果が得られます。

Mon Sep 19 09:29:24 CDT 2016 --> Wed Oct 19 09:29:24 CDT 2016
=============================================================

sunday
==========
2016-09-25
2016-10-02
2016-10-09
2016-10-16

monday
==========
2016-09-19
2016-09-26
2016-10-03
2016-10-10
2016-10-17

tuesday
==========
2016-09-20
2016-09-27
2016-10-04
2016-10-11
2016-10-18

wednesday
==========
2016-09-21
2016-09-28
2016-10-05
2016-10-12

thursday
==========
2016-09-22
2016-09-29
2016-10-06
2016-10-13

friday
==========
2016-09-23
2016-09-30
2016-10-07
2016-10-14

saturday
==========
2016-09-24
2016-10-01
2016-10-08
2016-10-15

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

特定の月の曜日の範囲を見つける方法

分類Dev

LinkedInから日付範囲のxpathを見つける方法

分類Dev

別のシートの範囲で最大日付と最小日付を見つける方法は?

分類Dev

日付範囲の更新ごとに行を印刷する方法

分類Dev

Androidで今月の土曜日と日曜日を見つける方法は?

分類Dev

日付範囲内に存在する日数を見つける

分類Dev

PHPの別の日付範囲内にある日付範囲内の日数を見つけるにはどうすればよいですか?

分類Dev

行ごとに2つの日付の間の行を見つける方法

分類Dev

MySQLは日付範囲内の最大値を見つけます

分類Dev

タイプスクリプトで今日の日付から来る土曜日と日曜日の日付を見つける方法は?

分類Dev

特定の月と年の週の日付範囲を見つける

分類Dev

データフレーム内の各グループの日付の範囲を見つける方法

分類Dev

指定された日付を見つける方法は、指定された日付範囲内にあります

分類Dev

Androidで特定の週の日付範囲を見つける方法は?

分類Dev

異なる日付時間範囲の平均を見つける

分類Dev

IDごとに複数の日付を見つける効率的な方法

分類Dev

Pythonで日付範囲の重複を見つける

分類Dev

日付範囲のギャップを見つける-TSQL

分類Dev

日付範囲Postgres間のギャップを見つける

分類Dev

日付範囲の行数を見つける-MySQL

分類Dev

日付範囲を見つけるためのLinqクエリ

分類Dev

SPARQLの文字列値から日付範囲を見つける

分類Dev

範囲内の設定日と交差する最小開始日を見つける

分類Dev

任意の日付の最も近い曜日を見つける方法は?

分類Dev

Javaで2つの日付範囲との交点を見つける(プログラム的に)

分類Dev

日付範囲を指定して、その範囲内で重複するイベントを見つけます

分類Dev

特定の日付範囲の間に欠落しているファイルを見つける方法は?

分類Dev

特定の日付から曜日 `tm_wday`を見つける方法は?

分類Dev

グループごとに範囲内の欠落している日付を入力する方法

Related 関連記事

  1. 1

    特定の月の曜日の範囲を見つける方法

  2. 2

    LinkedInから日付範囲のxpathを見つける方法

  3. 3

    別のシートの範囲で最大日付と最小日付を見つける方法は?

  4. 4

    日付範囲の更新ごとに行を印刷する方法

  5. 5

    Androidで今月の土曜日と日曜日を見つける方法は?

  6. 6

    日付範囲内に存在する日数を見つける

  7. 7

    PHPの別の日付範囲内にある日付範囲内の日数を見つけるにはどうすればよいですか?

  8. 8

    行ごとに2つの日付の間の行を見つける方法

  9. 9

    MySQLは日付範囲内の最大値を見つけます

  10. 10

    タイプスクリプトで今日の日付から来る土曜日と日曜日の日付を見つける方法は?

  11. 11

    特定の月と年の週の日付範囲を見つける

  12. 12

    データフレーム内の各グループの日付の範囲を見つける方法

  13. 13

    指定された日付を見つける方法は、指定された日付範囲内にあります

  14. 14

    Androidで特定の週の日付範囲を見つける方法は?

  15. 15

    異なる日付時間範囲の平均を見つける

  16. 16

    IDごとに複数の日付を見つける効率的な方法

  17. 17

    Pythonで日付範囲の重複を見つける

  18. 18

    日付範囲のギャップを見つける-TSQL

  19. 19

    日付範囲Postgres間のギャップを見つける

  20. 20

    日付範囲の行数を見つける-MySQL

  21. 21

    日付範囲を見つけるためのLinqクエリ

  22. 22

    SPARQLの文字列値から日付範囲を見つける

  23. 23

    範囲内の設定日と交差する最小開始日を見つける

  24. 24

    任意の日付の最も近い曜日を見つける方法は?

  25. 25

    Javaで2つの日付範囲との交点を見つける(プログラム的に)

  26. 26

    日付範囲を指定して、その範囲内で重複するイベントを見つけます

  27. 27

    特定の日付範囲の間に欠落しているファイルを見つける方法は?

  28. 28

    特定の日付から曜日 `tm_wday`を見つける方法は?

  29. 29

    グループごとに範囲内の欠落している日付を入力する方法

ホットタグ

アーカイブ