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 }