java.util.Date的有效范围?

我可以在java.util.Date中存储的有效值的范围是多少? API没有多说这个。

或者它是否仅支持可以表示为unix时间戳的日期(即1.1.1970之后的日期)? 如果是这样,JDK中是否有一个(可序列化的)类支持之前的日期?

我正在寻找的是db4o中生日字段的类/类型

它支持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.SZ"); 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 

(注意:以上时间是中央时间)

java.util.Date使用1970-01-01作为参考,以毫秒为单位存储日期。 由于long是带符号的64位整数,因此可以预期java.util.Date可以覆盖参考日期之前和之后约2.9亿年 – 也就是说,如果您不关心精确表示和日历系统切换。

除非你计划为恐龙举办生日派对,否则我会说java.util.Date可能适合你的目的……

日期可以包含1.1.1970之前的值,只需使用负长:-)