У меня не так много всего, что можно добавить к регулярному выражению, которое заботится об именах, потому что здесь уже есть несколько хороших предложений, но если вы хотите получить несколько ресурсов для получения дополнительной информации о регулярных выражениях, вы должны проверить:
25 * 24 * 60 * 60 * 1000 = 2160000000 = 0x80BEFC00
вы вычисляете целочисленное значение и получаете переполнение. если было
25 * 24 * 60 * 60 * 1000 л
, все должно быть в порядке.
Это не ошибка в классе Date, это случай целочисленного переполнения. int
в Java может быть только между -2 31 и 2 31 - 1, но 25 × 24 × 60 × 60 × 1000 больше 2 31 - 1, поэтому он переполняется.
Если вы запустите
System.out.println(24*24*60*60*1000);
System.out.println(25*24*60*60*1000);
, вы получите результат
2073600000
-2134967296
Если вы укажете одно из чисел, которые вы умножаете вместе, как длинное
на добавив к нему суффикс L
, продукт также будет иметь длину
. long
значения могут увеличиваться до 2 63 - 1, поэтому вы не получите переполнения, если не добавите лот дней к вашей Дате.
с. Например,
System.out.println(25L*24*60*60*1000);
дает вам
2160000000