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

Java 日期時間處理全攻略:從 Date 到 Calendar 實作萬年曆

     編輯:Java 相關知識

Java 早期 java.util.Date 與 Calendar 雖被 Java 8 新 API 取代,但在維護舊專案、理解底層原理時仍不可或缺。本文系統整理 Date 常用方法、SimpleDateFormat 格式化、printf 日期格式、字串轉日期、執行緒睡眠/計時、GregorianCalendar 實作,並附上 MVC 架構的萬年曆小程式完整原始碼。

核心 API 快速查閱

類別常用功能
DategetTime()、before/after、compareTo、toString
SimpleDateFormat自訂格式化/解析,支援 yyyy-MM-dd HH:mm:ss 等模式字元
printf / String.format%tF、%tT、%1$tY 索引參數複用
GregorianCalendarget()、add()、roll()、isLeapYear()、getActualMaximum()

關鍵程式碼範例

1. SimpleDateFormat 格式化與解析

SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println(ft.format(new Date())); // 輸出:Sun 2004.07.18 at 04:14:09 PM PDT

// 字串轉日期
String input = "2007-12-01";
Date d = new SimpleDateFormat("yyyy-MM-dd").parse(input);

2. printf 日期格式化技巧

Date now = new Date();
System.out.printf("%tc%n", now);                 // 完整日期時間
System.out.printf("%1$s %2$tB %2$td, %2$tY%n", "Due date:", now); // 索引複用
System.out.printf("%s %tB %<te, %<tY%n", "Due date:", now);        // < 標記復用

3. 執行緒睡眠與計時

long start = System.currentTimeMillis();
Thread.sleep(3000);
long diff = System.currentTimeMillis() - start; // 約 3000 ms

MVC 萬年曆小程式架構

  • CalendarModel:純演算邏輯(閏年判斷、金拉爾森公式算星期、每月天數)。
  • CalendarController:業務邏輯協調,操作 Model 並更新 View。
  • CalendarViewer:Swing UI(JWindow),三區塊:上方年月切換、中間星期/日期網格、下方關閉按鈕。

Model 核心演算法(金拉爾森公式)

public int dayOfWeek(int d, int m, int y) {
    if (m == 1) { m = 13; y--; }
    if (m == 2) { m = 14; y--; }
    return (d + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) % 7 + 1; // 1=週一
}

完整原始碼已整理於文章中,可直接複製執行。理解舊 API 不僅利於維護 Legacy Code,更能體會 Java 8 java.time 設計的優雅之處。

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