1. 程式人生 > 其它 >SpringBoot時間格式化的5種方法

SpringBoot時間格式化的5種方法

1.前端時間格式化

JS 版時間格式化

 1 function dateFormat(fmt, date) {
 2     let ret;
 3     const opt = {
 4         "Y+": date.getFullYear().toString(),        //
 5         "m+": (date.getMonth() + 1).toString(),     //
 6         "d+": date.getDate().toString(),            //
 7         "H+": date.getHours().toString(),           //
8 "M+": date.getMinutes().toString(), // 9 "S+": date.getSeconds().toString() // 10 // 有其他格式化字元需求可以繼續新增,必須轉化成字串 11 }; 12 for (let k in opt) { 13 ret = new RegExp("(" + k + ")").exec(fmt); 14 if (ret) { 15 fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
16 }; 17 }; 18 return fmt; 19 }

方法呼叫:

1 let date = new Date();
2 dateFormat("YYYY-mm-dd HH:MM:SS", date);
3   
4 >>> 2021-07-25 21:45:12

2.SimpleDateFormat格式化

1 // 定義時間格式化物件和定義格式化樣式
2 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
3 // 格式化時間物件
4 String date = dateFormat.format(new
Date())

3.DateTimeFormatter格式化

 1 @RequestMapping("/list")
 2 public List<UserInfo> getList() {
 3     // 定義時間格式化物件
 4     DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 5     List<UserInfo> list = userMapper.getList();
 6     // 迴圈執行時間格式化
 7     list.forEach(item -> {
 8         // 使用預留欄位 ctime 接收 createtime 格式化的時間(Date->String)
 9         item.setCtime(dateFormat.format(item.getCreatetime()));
10         item.setUtime(dateFormat.format(item.getUpdatetime()));
11     });
12     return list;
13 }

4.全域性時間格式化

我們可以不改任何程式碼,只需要在配置檔案中設定一下就可以實現時間格式化的功能了。

首先,我們找到 Spring Boot 的配置檔案 application.properties(或 application.yml),只需要在 application.properties 配置檔案中新增以下兩行配置:

# 格式化全域性時間欄位
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
# 指定時間區域型別
spring.jackson.time-zone=GMT+8

實現原理分析

這是因為 Controller 在返回資料時,會自動呼叫 Spring Boot 框架中內建的 JSON 框架 Jackson,對返回的資料進行統一的 JSON 格式化處理,在處理的過程中它會判斷配置檔案中是否設定了“spring.jackson.date-format=yyyy-MM-dd HH:mm:ss”,如果設定了,那麼 Jackson 框架在對時間型別的欄位輸出時就會執行時間格式化的處理,這樣我們就通過配置來實現全域性時間欄位的格式化功能了。

為什麼要指定時間區域型別“spring.jackson.time-zone=GMT+8”呢?

最現實的原因是,如果我們不指定時間區域型別,那麼查詢出來的時間就會比預期的時間少 8 個小時,這因為我們(中國)所處的時間區域比世界時間少 8 個小時導致的,而當我們設定了時區之後,我們的時間查詢才會和預期時間保持一致。

GMT 是什麼?

時間區域設定中的“GMT” 是什麼意思?

Greenwich Mean Time (GMT)格林尼治時間,也叫做世界時間。

5.部分時間格式化

某些場景下,我們不需要對全域性的時間都進行統一的處理,這種情況我們可以使用註解的方式來實現部分時間欄位的格式化。

我們需要在實體類 UserInfo 中新增@JsonFormat註解,這樣就可以實現時間的格式化功能了,實現程式碼如下:

 1 import com.fasterxml.jackson.annotation.JsonFormat;
 2 import lombok.Data;
 3 
 4 import java.util.Date;
 5 
 6 @Data
 7 public class UserInfo {
 8     private int id;
 9     private String username;
10     // 對 createtime 欄位進行格式化處理
11     @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone = "GMT+8")
12     private Date createtime;
13     private Date updatetime;
14 }