2014-10-30 80 views
0

考虑此程序:合并日期和时间到时间戳

import java.sql.Date; 
import java.sql.Time; 
import java.sql.Timestamp; 

public class Program { 

    public static void main(String[] args) throws Exception { 
     Date d = new Date(System.currentTimeMillis()); 
     Time t = new Time(System.currentTimeMillis()); 
     System.out.println("d = " + d); 
     System.out.println("t = " + t); 

     Timestamp ti = new Timestamp(d.getTime() + t.getTime()); // not working 
     System.out.println("ti = " + ti); 
    } 
} 

我有变量D代表日期和T的时候,我怎么能由这两个变量建立时间戳?

+0

你的时间't'应该有它的日期设置为1/1/1970和你的日期'd'应该有它的时间设置为00:00:00 ... – assylias 2014-10-30 09:42:14

回答

1

问题是日期和时间实例的内部表示是相同的(System.currentTimeMillis())。

如果你想要走那条路,你必须删除部分时间从日期实例和日期部分从时间实例:

public static void main(String args[]) { 
    Date d = new Date(System.currentTimeMillis()); 
    Time t = new Time(System.currentTimeMillis()); 

    System.out.println("d = " + d); 
    System.out.println("t = " + t); 

    long dd = d.getTime()/86400000l * 86400000l; 
    System.out.println("dd = " + dd); 
    long tt = t.getTime() - (t.getTime()/86400000l * 86400000l); 
    System.out.println("tt = " + tt); 

    Timestamp ti = new Timestamp(dd + tt); 
    System.out.println("ti = " + ti); 
} 
+0

奇怪的是,Date类型的变量存储时间和类型Time的变量存储有关日期的信息。不知道谢谢。 – Joe 2014-10-30 10:08:49

+0

@Joe java.sql.Date和.Time是缺乏任何类来表示仅限日期或只有时间值的笨拙手段。你应该阅读类文档,而不是仅仅通过类名来猜测功能。在发布之前搜索StackOverflow也会启发你。 – 2014-10-31 04:26:44

+1

Java 8及其新的[java.time包](http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)现在提供'LocalDate'和'LocalTime' ,也是启发java.time的Joda-Time库。 [本文](https://weblogs.java.net/blog/montanajava/archive/2014/06/17/using-java-8-datetime-classes-jpa)显示了一些代码来在旧Java之间来回转换.sql类和新的java.time值。 – 2014-10-31 04:27:19

0

简单的方法是给用户“日历”类设置日期和时间。获取完整的时间戳。