2014-10-30 78 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

簡單的方法是給用戶「日曆」類設置日期和時間。獲取完整的時間戳。