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

Java 日期時間處理核心類詳解:Date、SimpleDateFormat 與 Calendar 實戰指南

     編輯:Java 綜合教學

Java 日期時間處理核心類詳解

在 Java 程式開發中,日期與時間的處理是基礎且重要的技能。Java 提供了 java.util.Date、java.text.SimpleDateFormat、java.util.Calendar 等核心類別來應對各種時間相關需求。本文將系統介紹這三大類別的用法、常見操作與最佳實踐,並附上完整程式碼範例。

一、Date 類:時間戳的基礎表示

1.1 認識 Date 類

java.util.Date 類封裝了當前的日期與時間,精確到毫秒。它提供兩個建構子:

  • Date():以當前時間初始化物件。
  • Date(long millisec):接收自 1970 年 1 月 1 日 00:00:00 GMT 起的毫秒數。

建立 Date 物件後,常用方法包括 toString()、getTime()、before()、after()、compareTo() 等。

1.2 獲取當前時間範例

import java.util.*;

public class DateDemo {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println("直接輸出:" + now);
        System.out.println("toString():" + now.toString());
    }
}

輸出格式類似 Mon Mar 28 14:30:25 CST 2016,其中 CST 代表中國標準時間(UTC+8)。

1.3 日期比較的三種方式

  1. getTime() 比較:取得毫秒數後直接比大小。
  2. before()/after()/equals():語意清晰,如 new Date(99,2,12).before(new Date(99,2,18)) 回傳 true。
  3. compareTo():實作 Comparable 介面,回傳負數、0、正數分別代表早於、等於、晚於。

二、SimpleDateFormat:靈活格式化與解析

2.1 format():日期轉指定字串

透過模式字串定義輸出格式,常用模式字元:

符號意義範例
yyyy四位年份2024
MM兩位月份03
dd兩位日期28
HH24 小時制小時14
mm分鐘30
ss秒數25
import java.util.*;
import java.text.*;

public class FormatDemo {
    public static void main(String[] args) throws ParseException {
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formatted = sdf.format(now);
        System.out.println("當前時間:" + formatted);
    }
}

2.2 parse():字串轉 Date 物件

String str = "2016年03月01日 10:30:25";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date = sdf.parse(str);
System.out.println(date);

2.3 多格式轉換綜合範例

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
System.out.println(sdf1.format(now));
System.out.println(sdf2.format(now));
System.out.println(sdf3.format(now));

// 解析
String d = "2016-3-1 21:05:36";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parsed = sdf.parse(d);
System.out.println(parsed);

2.4 注意事項

  • parse() 會拋出 ParseException,必須捕捉或拋出。
  • 引入套件:java.util.Date、java.text.SimpleDateFormat。
  • 線程不安全:SimpleDateFormat 非線程安全,多線程環境建議使用 ThreadLocal 或 Java 8 的 DateTimeFormatter。

三、Calendar 類:功能強大的日曆運算

3.1 取得 Calendar 實例

Calendar 為抽象類,透過 Calendar.getInstance() 取得預設時區/語系的實例,已初始化為當前時間。

3.2 常用欄位常數與獲取元件

Calendar c = Calendar.getInstance();
int year   = c.get(Calendar.YEAR);
int month  = c.get(Calendar.MONTH) + 1; // 0 代表 1 月
int day    = c.get(Calendar.DAY_OF_MONTH);
int hour   = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.printf("當前時間:%d-%02d-%02d %02d:%02d:%02d%n",
        year, month, day, hour, minute, second);

3.3 Calendar 與 Date 互轉

Calendar c = Calendar.getInstance();
Date date = c.getTime();              // Calendar -> Date
long millis = c.getTimeInMillis();    // 取得毫秒數

// 結合 SimpleDateFormat 輸出格式化字串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatted = sdf.format(date);
System.out.println("當前時間:" + formatted);

3.4 日期運算(加減天、月、年)

Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, 10);   // 10 天后
c.add(Calendar.MONTH, -1);          // 1 月前
c.add(Calendar.YEAR, 1);            // 1 年后
System.out.println(sdf.format(c.getTime()));

總結與建議

  • Date:簡單時間戳,適合傳遞、儲存、比較。
  • SimpleDateFormat:格式化顯示與解析,注意線程安全。
  • Calendar:複雜日曆運算、元件提取、時區處理。
  • 現代專案(Java 8+):優先使用 java.time 套件(LocalDateTime、ZonedDateTime、DateTimeFormatter),不可變、線程安全、API 更豐富。

Date 類方法表 Date 輸出範例 SimpleDateFormat 輸出 parse 解析結果 多格式轉換結果 Calendar 常數表 Calendar 獲取時間 Calendar 轉 Date 結果

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