在 Web 開發里,時間格式處理既常見又關鍵。由于前端和后端對時間的表示、處理方式存在差異,熟練掌握時間格式的轉換方法就顯得尤為重要。這篇文章會深入探討 Java 前后端時間格式轉換的相關知識,特別是 Java 時間轉換的多種方式,其中包含注解的使用。
常見的時間格式
在開始轉換之前,我們先來了解一下常見的時間格式。
前端常見時間格式
在前端,常用的時間格式有YYYY-MM-DD(日期)、YYYY-MM-DD HH:mm:ss(日期和時間)等。例如2025-02-22、2025-02-22 12:30:00、02/22/2025 。
后端常見時間格式
在 Java 后端,常用的時間類有java.util.Date、java.time.LocalDate、java.time.LocalDateTime等。java.util.Date本身沒有特定的顯示格式,需要通過SimpleDateFormat或DateTimeFormatter來格式化顯示 。java.time包下的類則更加方便,例如LocalDate表示日期,格式為YYYY-MM-DD,LocalDateTime表示日期和時間,格式為YYYY-MM-DD HH:mm:ss。
Java 后端時間格式轉換方式
使用 SimpleDateFormat 進行轉換(Java 8 之前)
SimpleDateFormat是 Java 中用于格式化和解析日期的類。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class DateFormatExample {public static void main(String[] args) {// 格式化日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date now = new Date();String formattedDate = sdf.format(now);System.out.println("格式化后的日期: " + formattedDate);// 解析日期String dateStr = "2025-02-22 12:30:00";try {Date parsedDate = sdf.parse(dateStr);System.out.println("解析后的日期: " + parsedDate);} catch (ParseException e) {e.printStackTrace();}}
}
但SimpleDateFormat不是線程安全的,在多線程環境下使用可能會出現問題。
使用 DateTimeFormatter 進行轉換(Java 8 及之后)
DateTimeFormatter是 Java 8 引入的新的日期時間格式化類,它更加線程安全和靈活。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateTimeFormatterExample {public static void main(String[] args) {// 格式化日期時間DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime now = LocalDateTime.now();String formattedDateTime = now.format(formatter);System.out.println("格式化后的日期時間: " + formattedDateTime);// 解析日期時間String dateTimeStr = "2025-02-22 12:30:00";LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeStr, formatter);System.out.println("解析后的日期時間: " + parsedDateTime);}
}
使用注解進行時間格式轉換
在 Spring Boot 應用中,我們可以利用注解簡化時間格式的處理。
- @JsonFormat 注解:用于在 Java 對象與 JSON 數據相互轉換時格式化日期時間。假設我們有一個包含日期時間字段的實體類:
import com.fasterxml.jackson.annotation.JsonFormat; import java.time.LocalDateTime;public class Order {private Long id;// 將LocalDateTime格式化為指定格式的字符串用于JSON輸出@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private LocalDateTime orderTime;// 省略getter和setter方法 }
在上述代碼中,@JsonFormat注解標記在orderTime字段上,指定了輸出到 JSON 時的格式為yyyy-MM-dd HH:mm:ss,并且設置了時區為東八區。這樣,當我們將Order對象轉換為 JSON 字符串時,orderTime字段會按照指定格式進行格式化。
- @DateTimeFormat 注解:主要用于將前端傳遞過來的字符串參數解析為日期時間類型。例如在 Controller 層接收前端傳遞的時間參數:
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;@RestController
public class TimeController {@PostMapping("/processTime")public String processTime(// 將前端傳遞的字符串按指定格式解析為LocalDateTime@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {return "接收到的時間: " + time;}
}