首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實作週期性日期計算:支援農曆、第 N 個工作日等複雜規則

     編輯:Java 相關知識

功能概覽

支援 年/月/日/週/時/分/秒 基礎週期,並擴充 農曆節日、每月第 N 個週 X、月倒數第 N 天 等企業級排程需求。核心方法 nextTime() 可直接整合至提醒系統、會議室預約、定時任務觸發器。

方法簽名

public static String nextTime(
    String startDate,      // 起始日期 yyyy-MM-dd HH:mm:ss
    int cyclePeriod,       // 間隔數值
    String loopPeriod,     // 週期類型代碼
    Boolean isLunar        // 是否農曆計算
)

週期類型代碼表

代碼含義範例
y / m / d / w / h / f / s年/月/日/週/時/分/秒 遞增m,3 = 每 3 個月
mn <N>每月第 N 天mn15 = 每月 15 號
mb <N>每月倒數第 N 天mb2 = 每月倒數第二天
w <1-7>...每週指定星期(可多值)w135 = 週一、三、五
mn<N>w<X>每月第 N 個星期 Xmn1w2 = 每月第一個週二
mb<N>w<X>每月倒數第 N 個星期 Xmb2w4 = 每月倒數第二個週四

核心邏輯節錄

if ("m".equalsIgnoreCase(loopPeriod)) { // 月週期
    if (isLunar) {
        for (int i=0; i

依賴工具類(需自行實作或引入)

  • DateUtils.genDate(int y, int m, int d):組合日期字串
  • DateUtils.calDate(String date, int amount, int field):基於 Calendar 欄位增減
  • TimeUtils.addTime(String datetime, int type, int amount):時/分/秒運算
  • ChineseCalendar:農曆轉公曆核心(可參考 6tail/ChineseCalendar)
  • StringUtils.left/right/indexOf:字串擷取輔助

使用範例

// 每月第一個週五
nextTime("2024-01-01 00:00:00", 1, "mn1w5", false);
// 農曆除夕(農曆十二月三十)
nextTime("2024-02-09 00:00:00", 1, "m", true); // 需配合農曆邏輯判斷閏月
// 每 3 個月倒數第二天
nextTime("2024-01-30 00:00:00", 3, "mb2", false);

將複雜週期規則封裝為單一方法,配合農曆庫即可滿足 90% 以上的中文場景排程需求,程式碼可直接複製整合至 Spring Task / Quartz 排程器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved