做项目时遇到的设置结束时间问题,java设置当天最大时间传入数据无效
一、首先如何从后台拿时间传给前台,前台又如何传给后台的
首先前端使用wdatepicker控件,选中的为日期,前端的value为yyyy-MM-dd格式
这时后端POJO类要设置这两个注解:JsonFormat和DateTimeFormat这两个注解,
@ApiModelProperty(value = "申报开始时间")
@JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")*
@DateTimeFormat(pattern="yyyy-MM-dd")*
@TableField("OPEN_START_TIME")
private Date openStartTime;
此时虽然前端的value为yyyy-MM-dd,但是设置了这两个注解后,就会变成了英文格式,
Wed Feb 09 00:00:00 CST 2022
存入数据库后,会变为yyyy-MM-dd HH:mm:ss的形式,由于此时传的是日期,没有时分秒,所以时分秒为0
二、存的日期但是要改变某个时间怎么办
DateTimeFormat和JsonFormat注解一个是做数据库回显的,一个是做前端传给后端的,并没有涉及后端到数据库的流程。所以与他们没有关系。
我们公司使用了hutool的日期操作工具类----DateUtil
用来操作日期
一开始用的这个方法,
DateUtil.endOfDay(project.getOpenEndTime()).toJdkDate();
为啥要用toJdkDate()呢?
因为要把时间格式变为
Wed Feb 09 00:00:00 CST 2022
而不是
2022-03-09
此时值为当天的 23:59:59 ,看起来并没有问题,但是!
传到了数据库就自动变为整数了(用回上一张图,这里日期应为03-10而不是02-05)
后面查找资料发现,是由于mysql自己的问题,会把传过来的时间自动加1秒,一天最后的时间加了1秒那不就是变成了第二天了么?!
于是后面用了这个方法,指定了设为第23个小时,当然没有hutool的工具类也可以用别的工具类设置
project.setOpenEndTime(DateUtil.offsetHour(project.getOpenEndTime(), 23));
这时可以了,由于mysql会把传过来的时间自动加1秒,所以最好不要用一天最后的时刻这个方法。而是自己手动设值