Что не так с конструктором Java Date Date (длинная дата)? - PullRequest
4 голосов
/ 04 августа 2011

У меня есть два объекта, p4 и p5, которые имеют свойство Date.В некоторых моментах конструктор работает нормально:

p4.setClickDate(new Date(System.currentTimeMillis() - 86400000 * 4));

Устанавливает дату вс 31 июля 11:01:39 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2011

А в других ситуациях это не так:

p5.setClickDate(new Date(System.currentTimeMillis() - 86400000 * 70));

Устанавливает дату в пт 15 июля 04:04:26 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2011

По моим расчетам, это должно установить дату назад на 70 дней, нет?

Я могу обойтиэто с использованием Календаря, но мне любопытно, почему Дата ведет себя так.

Спасибо!

Ответы [ 2 ]

12 голосов
/ 04 августа 2011

Это вызвано целочисленным переполнением. Целые числа имеют максимальное значение Integer.MAX_VALUE, равное 2147483647. Вам необходимо явно указать число, равное long, добавив к нему суффикс L.

p5.setClickDate(new Date(System.currentTimeMillis() - 86400000L * 70));

Вы можете увидеть это сами, сравнив результаты

System.out.println(86400000 * 70); // 1753032704
System.out.println(86400000L * 70); // 6048000000

Смотри также:

3 голосов
/ 04 августа 2011

число слишком большое, и у вас есть переполнение, вы должны добавить L в конце, чтобы сделать его длинным. \ 8640000l (по умолчанию числа java int)

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