Mysql数据库的时间(4)一查询数据库时间注意点
一.select根据时间段查询
1.原始的sql根据时间段查询
select * from stu where time between "1998-09-01" and "1999-09-01";
//查询从1998-09-01到1999-09-01时间段的数据
等同于select * from stu where time >="1998-09-01" and time <="1999-09-01";
2.用XML写sql根据时间段查询
用date_format函数.
date_format(time,'%Y-%m-%d')定义时间格式把2022-02-28 18:55:02改为2022-01-28
select * from utime where create_time < date_format(#{time},'%Y-%m-%d');
二.select查询时间字段
1.在sql语句用date_foromat()函数中转换格式
如果是java用string接收数据库返回的时间字段,那么sql中可以用date_format()定义好时间格式.
具体实现和注意点详见我的扩展笔记--date_format()函数
Select DATE_FORMAT(`Deadline`, "%y-%m-%d %H:%i:%s") as deadline From table
2.select查询时间字段后java用什么类型去接.
注意:接收不到的字段就会默认填充1970.01.01 00.00.00
如:用java.sql.date去接收数据库的year, java.sql.date的类型是YYYY-MM-DD,而year是YYYY,那么MM-DD就会被默认填充为01-01. 例如2023会被默认填充为2023-01-01
数据库时间类型 | java可接收类型 |
---|---|
date | 除了数值类型,如Double, 其他什么时间类型都能接 |
time | 除了数值类型,如Double, 其他什么时间类型都能接 |
datetime | 除了数值类型,如Double, 其他什么时间类型都能接 |
timestamp | 除了数值类型,如Double, 其他什么时间类型都能接 |
year | 除了数值类型,如Double, 其他什么时间类型都能接 |
3.从数据库查出来成功接收到时间字段后,通过代码去修改格式
比如,用java.util.date接收到了查询数据库返回的时间字段,这时,java.util.date的时间格式是Mon Mar 14 11:08:25 GMT+08:00 2022
我们可以通过new SimpleDateFormat 去改变时间格式, 如下:
String timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println(timeStamp);
4:用@JsonFormat注解和@DataFormat去转换格式并返回给前端
public class ClassA{private String itemCode;@DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date deadline;
}
注解@JsonFormat主要是后台到前台的时间格式的转换 详情注意内容请看扩展笔记
注解@DataFormat主要是前后到后台的时间格式的转换(完全没用!)详情注意内容请看扩展笔记
pattern:是你需要转换的时间日期的格式
timezone:是时间设置为东八区,避免时间在转换中有误差
提示:@JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别
建议将日期格式转换及日期操作的独立写个工具类,也可以慢慢收集遇到不错的日期工具类