Допустимый диапазон для java.util.Date? - PullRequest
19 голосов
/ 30 марта 2011

какой диапазон допустимых значений я могу сохранить в java.util.Date? API ничего не говорит об этом.

Или поддерживает только даты, которые могут быть выражены как метки времени Unix (то есть даты после 1.1.1970)?Если да, то есть ли в JDK класс (сериализуемый), который поддерживает также даты до этого?

Что я ищу, так это класс / тип для поля дня рождения в db4o

Ответы [ 3 ]

27 голосов
/ 30 марта 2011

Поддерживаются даты между 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

(Примечание: вышеуказанное время - центральное время)

12 голосов
/ 30 марта 2011

java.util.Date сохраняет даты в long в миллисекундах, используя 1970-01-01 в качестве ссылки. Поскольку long является 64-разрядным целым числом со знаком, можно ожидать, что java.util.Date охватит около 290 миллионов лет до и после отчетной даты - то есть, если вам не нужны точные представления и переключатели календарной системы.

Если вы не планируете вечеринку по случаю дня рождения динозавра, я бы сказал, что java.util.Date, вероятно, подходит для ваших целей ...

1 голос
/ 30 марта 2011

Даты могут содержать значения до 1.1.1970, просто используйте отрицательный long: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...