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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM