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

Java 獲取系統時間與日期格式化完整教學

     編輯:Java 相關知識

核心 API 概覽

Java 提供多種時間處理方式,從傳統 Date/Calendar 到 Java 8 全新 java.time 套件。本文涵蓋主流舊版 API 實戰,並簡述現代最佳實踐。

一、基礎:Date + SimpleDateFormat

1. 獲取當前時間並格式化輸出

import java.util.Date;
import java.text.SimpleDateFormat;

public class NowString {
    public static void main(String[] args) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(df.format(new Date())); // 例:2024-05-20 14:30:45
    }
}

2. 常用格式符號對照表

符號含義範例
yyyy年份2024
MM月份05
dd日期20
HH24小時制14
mm分鐘30
ss秒數45

二、資料庫日期僅顯示年月日

方案 1:SQL CONVERT 函數(SQL Server)

String sql = "SELECT CONVERT(varchar(10), bookDate, 126) AS convertBookDate " +
             "FROM roomBook WHERE bookDate BETWEEN '2007-4-10' AND '2007-4-25'";

方案 2:Java 端 SimpleDateFormat 處理

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sql = "SELECT bookDate FROM roomBook WHERE bookDate BETWEEN ? AND ?";
// 執行查詢後
System.out.println(sdf.format(rs.getDate("bookDate")));

三、Calendar 詳細拆解時間欄位

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;

public class TestDate {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        System.out.println(df.format(now));

        Calendar c = Calendar.getInstance();
        int year   = c.get(Calendar.YEAR);
        int month  = c.get(Calendar.MONTH);      // 0-based!
        int date   = c.get(Calendar.DATE);
        int hour   = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
        System.out.printf("%d/%d/%d %d:%d:%d%n", year, month+1, date, hour, minute, second);
    }
}

注意:Calendar.MONTH 從 0 開始,實際月份需 +1。

四、字串與 Date 互轉

String → Date(解析)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date time = null;
try {
    time = sdf.parse("2024-05-20");
} catch (ParseException e) {
    e.printStackTrace();
}

Date → String(格式化)

String str = sdf.format(new Date());

五、線程安全陷阱與最佳實踐

  • SimpleDateFormat 非線程安全:請勿定義為 static 共享欄位。每次使用 new 實例,或使用 ThreadLocal 快取。
  • Java 8+ 強烈建議遷移至 java.time:
    LocalDateTime now = LocalDateTime.now();
    DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    System.out.println(now.format(fmt)); // 線程安全、不可變、API 更豐富
    

六、總結

掌握 Date、Calendar、SimpleDateFormat 的協作細節,能應付絕大多數舊系統維護需求。新專案請直接擁抱 java.time,享受不可變、線程安全、功能強大的現代時間 API。

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