隣り合う第三日曜日の間隔
ある月の第三日曜日から次の月の第三日曜日までの日数の分布を求める。
import static java.time.DayOfWeek.SUNDAY; import java.time.LocalDate; import java.time.YearMonth; import static java.time.temporal.ChronoUnit.DAYS; import static java.time.temporal.TemporalAdjusters.dayOfWeekInMonth; import java.util.HashMap; import java.util.Map; public class ThirdSundaysTI { public static void main(String[] args) { final YearMonth START = YearMonth.of(1980, 1); final YearMonth END = YearMonth.of(2050, 1); Map<Long, Integer> fd = new HashMap<>(); YearMonth d = START; LocalDate s = d.atDay(1).with(dayOfWeekInMonth(3, SUNDAY)); while (! (d = d.plusMonths(1)).isAfter(END)) { LocalDate e = d.atDay(1).with(dayOfWeekInMonth(3, SUNDAY)); fd.merge(s.until(e, DAYS), 1, (o, n) -> ++o); s = e; } fd.forEach((k, v) -> System.out.println(k + " " + v)); } }
実行してみると、
$ java ThirdSundaysTI 35 292 28 548
間隔は約一ヶ月なので四週間空く場合と五週間空く場合があることが分かる。
この28日と35日の度数の比率
292 : 548 = 1 : 1.8767...
の意味するところを考えてみる。
月の日数の平均値からの間隔28日と35日それぞれの偏差の絶対値の比率は、
365.25 / 12 = 30.4375 (30.4375 - 28) : (35 - 30.4375) = 2.4375 : 4.5625 = 1 : 1.8717...
ひと月の日数の平均値からの距離の近さに応じた配分で度数が分布していることが分かる。