MySQL中datetime数据类型和java中的String类型之间的转换
MySQL中的datetime格式的数据是行如:2021-01-14 13:52:00的形式,Java自带的java.sql.Date、java.sql.Time和java.sql.Timestamp都无法表示出这种形式,因此在开发时涉及到这种形式的日期时很不方便。若果Java用String来存储这种时间格式,那么在读写数据库的时候就需要注意格式之间的转换。读取数据库使用MySQL的库函数DATE
·
1. 概述
MySQL中的datetime
格式的数据是行如:2021-01-14 13:52:00
的形式,Java自带的java.sql.Date
、java.sql.Time
和java.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
更多推荐
已为社区贡献3条内容
所有评论(0)