1. 前端时间格式化
function dateFormat(fmt, date) {
let ret;
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = newRegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt;
}
2. SimpleDateFormat格式化
// 定义时间格式化对象和定义格式化样式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化时间对象
String date = dateFormat.format(new Date())
3. DateTimeFormatter格式化
JDK 8 之后,我们可以使用 DateTimeFormatter
来替代 SimpleDateFormat
,因为 SimpleDateFormat
是非线程安全的,而 DateTimeFormatter
是线程安全的,所以如果是 JDK 8 以上的项目,尽量使用 DateTimeFormatter
来进行时间格式化。
@RequestMapping("/list")
public List<UserInfo> getList() {
// 定义时间格式化对象
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<UserInfo> list = userMapper.getList();
// 循环执行时间格式化
list.forEach(item -> {
// 使用预留字段 ctime 接收 createtime 格式化的时间(Date->String)
item.setCtime(dateFormat.format(item.getCreatetime()));
item.setUtime(dateFormat.format(item.getUpdatetime()));
});
return list;
}
注意:DateTimeFormatter
和 SimpleDateFormat
在使用上的区别是 DateTimeFormatter
是用来格式化 JDK 8 提供的时间类型的,如 LocalDateTime
,而 SimpleDateFormat
是用来格式化 Date
类型的。所以,使用DateTimeFormatter
需要实体类的时间类型是LocalDateTime
例如:
@Data
publicclass UserInfo {
privateint id;
private String username;
@JsonIgnore
private LocalDateTime createtime;
private String ctime;
@JsonIgnore
private LocalDateTime updatetime;
private String utime;
}
可以使用 LocalDateTime
来接收 MySQL 中的 datetime
类型。
4. 全局时间格式化
只需要在 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 个小时导致的,而当我们设置了时区之后,我们的时间查询才会和预期时间保持一致
5. 使用@JsonFormat时间格式化
@Data
publicclass UserInfo {
privateint id;
private String username;
// 对 createtime 字段进行格式化处理
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone = "GMT+8")
private Date createtime;
private Date updatetime;
}