1. 概述

MySQL中的datetime格式的数据是行如:2021-01-14 13:52:00的形式,Java自带的java.sql.Datejava.sql.Timejava.sql.Timestamp都无法表示出这种形式,因此在开发时涉及到这种形式的日期时很不方便。

若果Java用String来存储这种时间格式,那么在读写数据库的时候就需要注意格式之间的转换。

 

2. 格式问题

1)读取数据库

使用MySQL的库函数DATE_FORMAT()对MySQL中datetime类型的数据进行处理得到String类型的数据。

select DATE_FORMAT(`create_time`, "%Y-%m-%d %H:%i:%s")as create_time from test_table;

在Mapper中定义resultMap时指定如下

<id column="create_time" property="createTime" jdbcType="TIMESTAMP"/>

 

2)写入数据库

将String类型的yyyy-MM-dd HH:mm:ss格式的时间写入MySQL中datetime类型的字段中,可以直接写入,不需要格式之间的转换。

 

3)还可以如下使用lombok和Json相关工具

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain = true)
public class User {

    private int id;

    private String name;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:SS")
    private Date bir;

    private String sex;

    private String address;
}

@JsonFormat来指定返回的Json中各字段的格式,需要的包依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.4.2</version>
</dependency>

 

4)还可以配置 application.properties 文件

如此配置,则读取出的时间都是我们需要的格式

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

 

3. 数据库中时间与读取出的时间相差8小时问题

1)在对应的Date字段上加上注解,指明 timezone

例如,北京时间处于东八区,比GMT快8小时,就可以如下设置

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;

2)在application.properties文件中修改MySQL的url中的serverTimezone为GMT

产生差8小时的原因在于数据库中正确的记录了时间,但是在读出的时候做了时区的转换。如果改为GMT就不会做转换

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/it_stack?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT

3)在application.properties文件中配置如下

设置了时间格式以及时区

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐