1、时间精度的分类

时间精度是根据各个用户所要求对时间的度量作出的分类,是用来进行计量的一种方式方法。

时间精度按量级可分为:纳秒(ns)、皮秒(ps)、微秒(us)、毫秒(ms)、秒(s)、分(min)、小时(h)。

2、Java中四个时间类的精度

java.util.Date 日期格式为:年月日时分秒
java.sql.Date 日期格式为:年月日
java.sql.Time 日期格式为:时分秒
java.sql.Timestamp 日期格式为:年月日时分秒微秒

备注:Timestamp为时间戳,时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。时间戳用于生成一个字符序列,唯一地标识某一刻的时间,常用于数字签名技术。

提醒:Timestamp是java.sql包下的类,非java.util下的类。

3、MyBatis的时间精度丢失问题

MyBatis处理日期有两种的jdbcType

(1)jdbcType=DATE
(2)jdbcType=TIMESTAMP

备注:此时的DATE指的是java.sql.Date,不是java.util.Date,要注意两者的区别。同理,TIMESTAMP指的是java.sql.Timestamp。

在实际开发过程中,如果我们将java.util.Date当做参数传递给Mapper的时候,需要指定jdbctype。

(1)假如我们不指定jdbcType,那么这个日期会自动转化会MySQL的timestamp,不会丢失精度。
(2)指定jdbcType=TIMESTAMP结果同上,也不会丢失精度
(3)指定jdbcType=DATE,那么MyBatis会将传入参数截取为2018-06-15,变成Date类型,此时会出现精度问题。

标签: none


添加新评论