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

Java 日曆程式設計思路與核心算法實現

     編輯:Java 相關知識

介面佈局規劃

四大區塊自上而下:

  1. 年月導航欄:左/右按鈕切換月份,中央顯示「YYYY 年 MM 月」。
  2. 星期列:固定七欄「日 一 二 三 四 五 六」。
  3. 日期網格:6 行 × 7 列按鈕/標籤,動態填充當月日期,灰化上下月溢出格。
  4. 關閉按鈕:底部退出程式。

核心算法:計算某日星期幾

蔡勒公式變體:

(年 + 年/4 + 年/400 - 年/100 - 年基數 + 月基數 + 日) / 7 = ... 餘數即星期
註:除法取整。年基數:平年1、閏年2。月基數見下表。
月平年閏年
100
233
334
460
512
645
700
833
956
1001
1134
1256

例:1949-10-1 → (1949+487+4-19-1+0+1)/7 = 345 餘 6 → 星期六。

閏年判斷

boolean isLeap(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

類設計

  • SDate (工具類):全靜態方法 isLeap、firstDayOfMonth(year, month) 返回 1 日星期、daysInMonth(year, month) 返回天數。
  • DateGrid (面板):繼承 JPanel,持有年月狀態,refresh() 根據 SDate 計算重繪日期按鈕,註冊上一月/下一月/關閉事件。

Swing 實現要點

  • 使用 GridLayout(7,7) 佈局星期列+日期網格(首行星期)。
  • 日期按鈕用 JButton,當月正常顏色,非當月灰色,今日加粗邊框。
  • 年月切換修改字段後調用 refresh() 並 revalidate()/repaint()。

現代化建議

Java 8+ 直接使用 java.time.YearMonth、LocalDate、DayOfWeek 替代手算,程式碼更簡潔且無 Bug。

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