2013-11-21 26 views
4

我有不一致的問題,隨着時間的推移對象Java的時間問題

Time time1 = new Time(72000000); //21:00 
Time time2 = new Time(new Date().getTime()); //before 21 pm 

time2.before(time1); 

最後一行返回總是假的,爲什麼呢?

+2

Java的時間大約是毫秒的數量自1970年1月1日, – Fabinout

+0

這是那些總是被upvoted但在API中直接回答的問題之一。 –

+0

提供的答案可以很好地解釋發生了什麼。如果你可以作爲API的時間和日期操作更好,我建議使用JodaTime(http://www.joda.org/joda-time/)。 – KrisM82

回答

1

這不是在做你認爲它應該做的事!

Time time1 = new Time(72000000); 

看到這個:

Time 

public Time(long time) 

Constructs a Time object using a milliseconds time value. 

Parameters: 
    time - milliseconds since January 1, 1970, 00:00:00 GMT; a negative number is milliseconds before January 1, 1970, 00:00:00 GMT 

現在,希望你懂的...

+1

另一個人先回答 –

2

時間:

與java.util.Date類,它允許JDBC API將該類標識爲SQL TIME值瘦包裝。 Time類添加格式化和解析操作以支持時間值的JDBC轉義語法。 日期組件應該設置爲1970年1月1日的「零時期」值,不應該被訪問。

http://docs.oracle.com/javase/7/docs/api/java/sql/Time.html

基本上你在一天中某個時候比較21:00第一1970年1月到當前的日期。顯然以前的時間更早發生,並且「更小」。

0

由於您沒有另行指定,我假設Time對象是java.sql.Time

該對象使用java.util.Date的超類,所以它實際上是一個完整的日期對象。爲了JDBC(SQL)的目的,它只關注日期的時間部分。

此:

Time time1 = new Time(72000000); 

...創建代表1月 - 1970年21:00的對象。它將始終在任何當前時間之前。

0

似乎時間1爲14:00。運行下面的代碼片段。

Time time1 = new Time(72000000); //21:00 
System.out.println(time1); //prints 14:00 
System.out.println(new Date()); 
Time time2 = new Time(new Date().getTime()); //before 21 pm