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

Java 日期時間處理:獲取當前時間與前一天日期的標準做法

     編輯:Java 程式設計入門

現代 Java 日期時間 API(Java 8+)

自 Java 8 起,強烈建議使用 java.time 套件,取代老舊的 Date、Calendar、SimpleDateFormat。新 API 具備不可變性、執行緒安全、API 直觀等優勢。

獲取當前日期時間

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedNow = now.format(formatter);
System.out.println("當前時間:" + formattedNow);

獲取前一天日期

LocalDateTime yesterday = now.minusDays(1);
String formattedYesterday = yesterday.format(formatter);
System.out.println("前一天:" + formattedYesterday);

完整可執行範例

package com.example.datetime;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeDemo {
    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime yesterday = now.minusDays(1);
        
        System.out.println("當前時間:" + now.format(formatter));
        System.out.println("前一天:" + yesterday.format(formatter));
        
        // 進階:獲取本週一、本月第一天等
        System.out.println("本週一:" + now.with(java.time.temporal.TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY)).format(formatter));
        System.out.println("本月第一天:" + now.withDayOfMonth(1).format(formatter));
    }
}

舊版 API 寫法(維護舊專案參考)

若專案仍停留在 Java 7 或更早版本,可使用 Calendar:

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

public class LegacyDateDemo {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        Date now = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(now);
        cal.add(Calendar.DAY_OF_MONTH, -1); // 減一天
        Date yesterday = cal.getTime();
        
        System.out.println("當前:" + sdf.format(now));
        System.out.println("前一天:" + sdf.format(yesterday));
    }
}

常見陷阱與最佳實踐

問題錯誤做法正確做法
執行緒安全static SimpleDateFormat 共用使用 DateTimeFormatter(不可變、執行緒安全)或 ThreadLocal
時區處理忽略時區,直接用 Date使用 ZonedDateTime 或 OffsetDateTime 明確指定時區
效能頻繁創建 SimpleDateFormatDateTimeFormatter 可重複使用;或預編譯格式化器
可讀性Calendar.add(Calendar.DATE, -1)LocalDateTime.minusDays(1) 語意清晰

實用工具方法封裝建議

public class DateUtils {
    private static final DateTimeFormatter STANDARD_FMT = 
        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    
    public static String now() {
        return LocalDateTime.now().format(STANDARD_FMT);
    }
    
    public static String yesterday() {
        return LocalDateTime.now().minusDays(1).format(STANDARD_FMT);
    }
    
    public static String format(LocalDateTime dateTime) {
        return dateTime.format(STANDARD_FMT);
    }
    
    public static LocalDateTime parse(String str) {
        return LocalDateTime.parse(str, STANDARD_FMT);
    }
}

總結

  • 新專案:直接使用 java.time.LocalDateTime / ZonedDateTime
  • 舊專案維護:理解 Calendar 寫法,但新增代碼盡量隔離遷移
  • 格式化:統一使用 DateTimeFormatter,定義為常數複用
  • 業務邏輯:善用 TemporalAdjusters 處理「本月最後一天」、「下個工作日」等複雜邏輯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved