2011-03-30 41 views
16

我可以存儲在java.util.Date中的有效值的範圍是什麼? API對此沒有太多說明。java.util.Date的有效範圍?

還是它只支持可以表示爲unix時間戳的日期(即1970年1月1日之後的日期)?如果是這樣,那麼在JDK中是否有一個(serializeable)類可以支持之前的日期?

我正在尋找的是db4o中

回答

22

它支持Long.MIN_VALUE與Long.MAX_VALUE之間的日期:

class DateTest { 
    public static void main(String[] args) { 
     DateFormat df = new SimpleDateFormat("d MMM yyyy G, HH:mm:ss.S Z"); 

     System.out.println(df.format(new Date(Long.MIN_VALUE))); 
     System.out.println(df.format(new Date(0))); 
     System.out.println(df.format(new Date(Long.MAX_VALUE))); 
    } 
} 

輸出

2 Dec 292269055 BC, 10:47:04.192 -0600 
31 Dec 1969 AD, 18:00:00.0 -0600 
17 Aug 292278994 AD, 01:12:55.807 -0600 

(注:以上時間均爲美國中部時間)

+1

它並沒有突破,你只是不打印時代領域... – 2011-03-30 15:16:38

+0

@Michael Borgwardt - 雖然「日期」本身沒有時代字段(至少不是一個可訪問的一個) - 如果我要包裝它在「日曆」中可以打印。 – 2011-03-30 15:24:27

+0

猜猜Date.toString()做了什麼(在猜測System.println(Object)的作用之後)。 – 2011-03-30 15:26:52

1

日期可以1.1.1970之前包含值,只需使用負長:-)

12

java.util.Date商店日期生日場的一類/類型以1970-01-01作爲參考的毫秒爲long。由於long是一個有符號的64位整數,因此您可以預期java.util.Date覆蓋參考日期前後約2.9億年 - 即如果您不關心精確表示和日曆系統切換。

除非你正在規劃一個恐龍生日聚會,我會說,java.util.Date可能是你的目的罰款...

+0

這很有幫助,謝謝。我不知道負值對於時間戳是有效的。 – Dexter 2011-03-30 15:06:07