package sample.context; import java.time.*; import org.springframework.beans.factory.annotation.Autowired; import lombok.Setter; import sample.util.*; /** * 日時ユーティリティコンポーネント。 */ @Setter public class Timestamper { public static final String KeyDay = "system.businessDay.day"; @Autowired(required = false) private AppSettingHandler setting; private final Clock clock; public Timestamper() { clock = Clock.systemDefaultZone(); } public Timestamper(final Clock clock) { this.clock = clock; } /** 営業日を返します。 */ public LocalDate day() { return setting == null ? LocalDate.now(clock) : DateUtils.day(setting.setting(KeyDay).str()); } /** 日時を返します。 */ public LocalDateTime date() { return LocalDateTime.now(clock); } /** 営業日/日時を返します。 */ public TimePoint tp() { return TimePoint.of(day(), date()); } /** * 営業日を指定日へ進めます。 * <p>AppSettingHandlerを設定時のみ有効です。 * @param day 更新営業日 */ public Timestamper proceedDay(LocalDate day) { if (setting != null) setting.update(KeyDay, DateUtils.dayFormat(day)); return this; } }