Jave 中Date Time Timestamp的关系

文章地址:http://quentinxxz.iteye.com/blog/2102010

  • java.util.Date

       The class Date represents a specific instant in time, with millisecond precision.

       精度从javadoc 上来,Date是精确到微秒的。

 

      值得注意的是leap second的介绍,这又是一个有趣的故事。

       “国际地球自转和参考坐标系统服务(IERS)在2012年6月30日午夜(北京时间7月1号7点59分59秒)增加一闰秒(即出现7:59:60)。由于Linux kernel 2.6.29之前版本存在bug,在进行闰秒调整时可能会引起系统时钟服务ntpd进程死锁。Debian Lenny、RHEL/CentOS 5等旧发行版今天仍被广泛使用,部分供应商早已经发布了补丁。但除了Linux服务器外,一些服务器程序也因为闰秒出现了问题,如Reddit、Mozilla、FourSquare、Yelp、LinkedIn和Gawker等网站都短暂遭遇了技术问题,国内的一家云储存供应商发现运行在CentOS 6.2上的Java和MySQL因闰秒出现了不同程度的CPU利用率增长,猜测是JVM和MySQL试图通过CPU硬件晶振的数据获得当前精确的时间,由于闰秒的关系,这个时间和操作系统维持的墙上时间(Wall Time,也就是显示给用户看的时间)不一致,导致了这个问题。简单的修正方法是强制重置系统时间,让系统中所有时间回到同步的状态。”

       

         所以Date中所有涉及年月日的操作都是Deprecated。Get方法中只有Long getTime() 方法是未Deprecated。构造方法里Date(long date) 是未Deprecated

 

  • Java.sql.Time
java.sql

Class Time

      可见java.sql.Time是继承于java.util.Date,是用对Sql 中Time类型的支持的,其精度,是足以存放sql中的Time类型的。

 

  • Java.sql.Timestamp

     java.sql

Class Timestamp

      同样java.sql.Timestamp也是继承于java.util.Date,它是对sql中Timestamp的支持,精度达到纳秒级(具体能不能精确到1纳秒,那就要看机器了)。它是由java.util.Date与单独的纳秒数值共同组合而成的。

当传入对象不是 java.sql.Timestamp类型时, Timestamp.equals(Object) 永远不会返回 true。因为时间的纳秒部份是未知的。所以就有可能Timestamp.equals(Date date)为false, Date.equals(Timestamp)返回false的情况。Timestamp.equals(Object)与Date.equals(Object)的equals方法是不对称的。

如果需要与Date类型进行比较,使用public int compareTo(Date o)方法。

      Timestamp 的hash值的计算方法如下,

           (int)(this.getTime()^(this.getTime() >>> 32))

      所以只包含了 java.util.Date的数值,并未使用nanos 纳秒字段。

 

  • Java.sql.Date

同样,java.sql.Date 是对应sql中的Date类型的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值