Class Calendars
java.lang.Object
io.leandev.appfuse.calendar.Calendars
BusinessCalendar 的組合工廠(ADR-012)
應用層以 builder 宣告具名行事曆——底座(政府行事曆或全可選)疊加業務規則 (每週店休、非過去、前置天數、特例覆寫),組合邏輯只存在後端這一份:
BusinessCalendar delivery = Calendars.government(almanac.calendar())
.closedOn(DayOfWeek.MONDAY) // 每週一店休 → CLOSED_WEEKLY
.noPast() // 非過去 → PAST
.leadDays(2) // 今天起 2 天內不可選 → LEAD_TIME
.closed(LocalDate.of(2026, 8, 10), "STORE_EVENT") // 特例休
.open(LocalDate.of(2026, 7, 20)) // 特例補開(覆寫所有規則)
.build();
判定順序:特例覆寫(open / closed)→ 時間窗(noPast / leadDays / maxAdvance)→
每週店休 → 自訂規則 → 底座(政府假日)。「今天」由 zone / clock 決定
(預設 Asia/Taipei,對齊 CalendarService;測試可注入固定 Clock)。
- Since:
- 4.0
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionstatic Calendars.Builderalways()以「全部可選」為底座(純業務規則行事曆,不掛政府行事曆)static Calendars.Buildergovernment(CalendarService source) 以政府行事曆(almanac)為底座——假日不可選(ReasonCodes.HOLIDAY)、 節日名稱透傳至DayStatus.description()
-
Field Details
-
DEFAULT_ZONE
預設時區(對齊CalendarService)
-
-
Method Details
-
always
-
government
以政府行事曆(almanac)為底座——假日不可選(ReasonCodes.HOLIDAY)、 節日名稱透傳至DayStatus.description()- Parameters:
source- almanac 行政機關辦公日曆服務- Returns:
- Builder
-