谨慎使用Date和Time类

原创 2004年12月29日 11:46:00
 JAVA里提供的日期和时间类,java.sql.Date和java.sql.Time,只会从数据库里读取某部分值,这有时会导致丢失数据。例如一个包含2002/05/22 5:00:57 PM的字段,读取日期时得到的是2002/05/22,而读取时间时得到的是5:00:57 PM.


你需要了解数据库里存储时间的精度。有些数据库,比如MySQL,精度为毫秒,然而另一些数据库,包括Oracle,存储SQL DATE类型数据时,毫秒部分的数据是不保存的。以下操作中容易出现不易被发现的BUG:

获得一个JAVA里的日期对象。
从数据库里读取日期
试图比较两个日期对象是否相等。如果毫秒部分丢失,本来认为相等的两个日期对象用Equals方法可能返回false。
java.sql.Timestamp类比java.util.Date类精确度要高。这个类包含了一个getTime()方法,但是它不会返回额外精度部分的数据,因此必须使用getNanos()方法。有毫微秒部分(即额外精度部分)的数值可能比没有这个部分的数值的大一个毫秒。如果你知道你使用的数据库保存了毫秒部分,可以用下面的代码获得的数值:

long time=timestamp.getTime()+timestamp.getNanos()/1000000;
毫微秒的部分就是为什么一个java.sql.Timestamp对象不等于一个java.util.Date对象,而一个java.util.Date对象可能等于一个java.sql.Timestamp对象的原因。这使得equals方法应当保持的对称被打破了。

使用java.sql包中的时间相关的类是重要的,但是它们也可能导致人为的错误。

这是因为,这些类的复杂性虽然已经在javadoc里面清楚的描述了,但是由于这些类看上去很简单而很少有人看这些文档。

谨慎使用Date和Time类

JAVA里提供的日期和时间类,java.sql.Date和java.sql.Time,只会从数据库里读取某部分值,这有时会导致丢失数据。例如一个包含2002/05/22 5:00:57 PM的字段,读...
  • StoneOK07
  • StoneOK07
  • 2012年02月09日 16:56
  • 221

谨慎使用Date和Time类

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";...
  • java169
  • java169
  • 2008年05月23日 23:42
  • 202

将例3.13中的Time类声明为Date类的友元类(第三章第十一题)

#include using namespace std; class Time; class Date {public: Date(int,int,int); friend Time; priva...
  • zengxianpei
  • zengxianpei
  • 2015年04月20日 15:56
  • 2076

Java编程经验技巧 谨慎使用Date和Time类

JAVA里提供的日期和时间类,java.sql.Date和java.sql.Time,只会从数据库里读取某部分值,这有时会导致丢失数据。例如一个包含2008/04/01 5:00:57 PM的字段,读...
  • gohands
  • gohands
  • 2008年04月01日 10:09
  • 979

JAVA处理日期(Date)时间(Time)以及相关类的介绍

JAVA处理日期时间常用方法: 1.    java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等...
  • xiaojianpitt
  • xiaojianpitt
  • 2008年02月28日 13:27
  • 34774

Android时间日期类小结

1.Calendar    Calendar类有个类方法叫做getInstance()。这个方法返回一个Calendar子类的具体实现类的实例(Calendar是一个抽象类,它的实现类是Gregori...
  • u011913612
  • u011913612
  • 2016年08月24日 11:15
  • 3174

android 中Time类的过时与GregorianCalendar类

今天白天上课时,老师是这样获取当前时间的, Time time; time = new Time(); time.setToNow(); Log.i("MYTAG", time...
  • hzh_csdn
  • hzh_csdn
  • 2016年08月18日 22:46
  • 1419

jAVA处理日期(Date)时间(Time)以及相关类的介绍

Java处理日期时间常用方法: 1.    java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR...
  • hustxiayu
  • hustxiayu
  • 2016年05月28日 18:12
  • 2895

java8 -Date/Time

java8 - Date/Time
  • cool__wang
  • cool__wang
  • 2016年08月23日 14:47
  • 822

用bat使用date和time命令

date的用法 D:\>date /T 2010-12-10 星期五   D:\>echo %date:~0,10% 2010-12-10 date:命令(别忘记date后面有个冒号) ...
  • zoutuo
  • zoutuo
  • 2011年10月24日 09:45
  • 9546
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 谨慎使用Date和Time类
举报原因:
原因补充:

(最多只允许输入30个字)