java.util.Date的有效范围?

时间:2011-03-30 14:56:28

标签: java date jvm

我可以在java.util.Date中存储的有效值的范围是多少? API对此并没有太多说明。

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

我正在寻找的是db4o

中生日字段的类/类型

3 个答案:

答案 0 :(得分:27)

它支持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 :(得分:12)

使用1970-01-01作为参考,

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

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

答案 2 :(得分:1)

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