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

Java 獲取當前系統時間與格式化輸出實戰

     編輯:Java 程式設計入門

在 Java 中獲取並格式化當前時間是基礎高頻操作。本文介紹 java.util.Date 與 java.text.SimpleDateFormat 的經典組合,並補充現代 java.time API(Java 8+)的最佳實踐。

經典方案(Java 1.1+)

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

public class NowString {
    public static void main(String[] args) {
        // 線程不安全!多線程環境下請使用 ThreadLocal 或 DateTimeFormatter
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(df.format(new Date())); // 輸出如:2024-03-15 14:30:45
    }
}

常用格式模式字母

字母含義示例
y年2024 / 24
M月03 / 3 / Mar / March
d日15
H時(24制)14
h時(12制)02
m分30
s秒45
S毫秒123
E星期週五
aAM/PMPM
z時區CST / GMT+08:00

⚠️ 線程安全陷阱

SimpleDateFormat 非線程安全。多線程共享實例會導致解析錯誤或數據競爭。解決方案:

  • 方法內局部創建(性能稍差)
  • ThreadLocal<SimpleDateFormat> 緩存
  • 推薦:遷移至 Java 8+ java.time API

現代方案:java.time 包(Java 8+ 強烈推薦)

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.ZoneId;
import java.util.Date;

public class ModernTime {
    public static void main(String[] args) {
        // 1. 獲取當前時間(不可變、線程安全)
        LocalDateTime now = LocalDateTime.now();
        System.out.println("默認格式: " + now); // 2024-03-15T14:30:45.123

        // 2. 自定義格式(線程安全,可共享)
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("格式化: " + now.format(fmt)); // 2024-03-15 14:30:45

        // 3. 解析字符串
        LocalDateTime parsed = LocalDateTime.parse("2024-01-01 00:00:00", fmt);

        // 4. 與舊 API 互操作
        Date legacyDate = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
        LocalDateTime converted = legacyDate.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDateTime();
    }
}

java.time 核心類速查

類用途特點
LocalDateTime日期時間(無時區)最常用,不可變
LocalDate僅日期生日、節假日
LocalTime僅時間鬧鐘、營業時間
ZonedDateTime帶時區日期時間跨時區業務
Instant時間戳(納秒精度)日誌、持久化、傳輸
DateTimeFormatter格式化/解析線程安全,可共享單例

總結建議

  • 新項目/Java 8+:直接使用 java.time,API 設計更清晰、線程安全、功能豐富。
  • 維護舊代碼:若無法升級,請用 ThreadLocal<SimpleDateFormat> 包裝舊 API。
  • 數據庫/網絡傳輸:統一使用 ISO-8601 格式(yyyy-MM-dd'T'HH:mm:ss.SSSXXX)或時間戳(Instant.toEpochMilli())。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved