sno*_*ndy 11 java comparison timestamp
你好,我有一个像这样的代码片段:
Date d1 = new java.sql.Timestamp(new Date().getTime());
Thread.sleep(10);
Date d2 = new java.sql.Timestamp(new Date().getTime());
System.out.println("Date1: " + d1);
System.out.println("Date2: " + d2);
System.out.println("Comparing times d1.t < d2.t: " + (d1.getTime() < d2.getTime()));
System.out.println("Comparing dates d1.before(d2): " + (d1.before(d2)));
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
Date1: 2013-03-26 11:04:01.093
Date2: 2013-03-26 11:04:01.103
Comparing times d1.t < d2.t: true
Comparing dates d1.before(d2): false
Run Code Online (Sandbox Code Playgroud)
这个java.sql.Timestamp类出了什么问题?
是的,我看到了这个:
注意:此类型是java.util.Date和单独的纳秒值的组合.只有整数秒存储在java.util.Date组件中.分数秒 - 纳米 - 是分开的.传递类型为java.util.Date的值时,Timestamp.equals(Object)方法永远不会返回true,因为日期的nanos组件未知.因此,Timestamp.equals(Object)方法与java.util.Date.equals(Object)方法不对称.此外,哈希码方法使用底层的java.util.Date实现,因此在其计算中不包括nanos.
由于Timestamp类和上面提到的java.util.Date类之间存在差异,因此建议代码不要将Timestamp值一般视为java.util.Date的实例.Timestamp和java.util.Date之间的继承关系实际上表示实现继承,而不是类型继承.
但它是Date < - > Timestamp关系.
在我的例子中,我只有Timestamps,但行为仍然是意外的..
更新:答案
发生这种情况的原因是before()方法过载,而不是覆盖java.sql.Timestamp.我期待'覆盖'行为.比较时间戳的正确方法是使用Timestamp变量,而不是Dates.
这在Java核心中仍然是一个糟糕的设计决策,因为继承应该意味着Timestamp是一个Date,没有惩罚和例外.
尝试使用Timestamp代替Date,它会起作用。
Timestamp d1 = new java.sql.Timestamp(new Date().getTime());
Run Code Online (Sandbox Code Playgroud)
Timestamp并且Date都有自己的方法实现before。核实。
| 归档时间: |
|
| 查看次数: |
9705 次 |
| 最近记录: |