相关疑难解决方法(0)

从java.util.Date创建的java.sql.Timestamp,为什么总是在()之前呢?

在发现错误之后,我注意到如果我从java.util.Date创建一个java.sql.Timestamp,使用占用毫秒的构造函数,则Date实例总是在()时间戳之后.这是令人费解的,因为(a)before()的合同指定了严格的比较,(b)如果不相等,Timestamp,因为它有纳秒,可能本身就是在Date之后.但结果是相反且可重复的(使用JDK 1.6和1.7,具有不同的JVM时区).比较两个日期可以正常工作,但在Date上调用before()或after()并给出Timestamp参数会产生意外结果.

下面的示例代码有两个Date和一个Timestamp实例,所有这些实例都具有相同的毫秒值.然而,将Date与Timestamp进行比较会显示Date之后()时间戳.

import java.util.Date;
import java.sql.Timestamp;

public class X extends Date {

    public static void main(String[] args) {
        Date d1 = new Date();
        Date d2 = new Date(d1.getTime());
        Timestamp t = new Timestamp (d1.getTime());
        System.out.println ("date1 = " + d1 + " (" + d1.getTime() + ")" );
        System.out.println ("date2 = " + d2 + " (" + d2.getTime() + ")" );
        System.out.println ("timestamp = " + t + "  (" + t.getTime() + ")" );
        System.out.println ("d1 before …
Run Code Online (Sandbox Code Playgroud)

java time

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×1

time ×1