前言
项目中经常会用到与日期相关的注解,这里简单介绍下吧
第一种:——》实体类会封装成日期“yyyy-MM-dd”的 Date类型。
第二种:——》实体类会封装成时间“hh-MM-ss”的 Date类型。
第三种:——》实体类会封装成完整的时间“yyyy-MM-dd hh:MM:ss”的 Date类型。
1、@Temporal(TemporalType.DATE)
如果字段为date类型,则非常匹配,查询出来到前台的处理直接就是2019-01-24
如果数据库字段为datetime类型,则,数据库时分秒会变成00:00:00,但是到了前台只显示年月日
2、@Temporal(TemporalType.TIME)
数据库字段为datetime 类型
insert插入报错:Incorrect datetime value: ‘17:31:28’ for column ‘cdate’ at row 1
查询是没有问题的,到前台自动处理变成时分秒,如下
所以,一般不要使用它(因为就没有一个字段是只保存时分秒的,毫无意义啊~~~~)
// {
// "id": 1,
// "dateT": null,
// "dateTTime": null,
// "dateTTimesTamp": null,
// "dateTimeFormat": null,
// "dateTDate": null,
// "cdate": "17:31:28",
// "udate": 1548322288000
// }
// @Temporal(TemporalType.TIME)
@ApiModelProperty(value = "dateTime类型 TemporalType.TIME date类型为 hh-MM-ss",dataType = "date")
private Date dateTTime ;
3、@Temporal(TemporalType.TIMESTAMP)
非常正常的数据处理,返回到前台就是一个时间戳,到了库里面,年月日,时分秒
4、前面3个的总结
即使上面各有各的转化格式,但是在我们设置Controller它们所匹配的字段接收的时候,还是根据前台出来的值进行接收的(前台传来什么,我们在运行代码的时候就是什么,和上面的3中主键没有关系),只不过在入库,或者是在铺数据到前台的时候会发生一些格式转化。4、格式化到前台,使用率非常高
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
5、格式化到数据库
1. @DateTimeFormat(pattern = "yyyy-MM-dd")//存日期时使用,还是算了包。存日期我这里有问题 ,一般也没必要整这个
2. private Date startTime;
测试
1、实体类
package com.hlj.entity.db.demo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import org.hibernate.annotations.UpdateTimestamp;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.util.Date;
/**
* 作者 :HealerJean
* 日期 :2019/1/24 下午5:10.
* 类描述:
*/
@Entity
@Table(name = "demo_entity_date")
@Data
@Accessors(chain = true)
@ApiModel(value = "D04-测试Temporal 日期格式问题")
public class D04DateEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ApiModelProperty(value = "demo01update 主键")