2010-11-30 3 views
11

Год 2038 Ошибка в Интернете, но это, похоже, проблема unix. Как это повлияет на дату Java?Зачем программисту Java заботиться о ошибке 2038 года?

+7

Будет ли еще фильм Роланда Эммериха об этом? – 2010-11-30 12:28:55

+0

Это не ошибка. Всем известно, что мир закончится к 2038 году. Вопрос только в том, как. Мое предположение - зомби-чума. – Steve314 2010-11-30 12:30:38

+2

Не нужно никого беспокоить .. как мы все знаем, земля заканчивается в 2012 году в любом случае. Напиши немного классных вещей, а не – chzbrgla 2010-11-30 12:32:18

ответ

27

Что заставляет вас думать, что это так? Класс Java Date хранит 64-разрядный long (не 32-разрядный, как у Y2K38). Он также сохраняет миллисекунды, что уменьшает диапазон, но только незначительно (эквивалентно ~ 10 бит).

В Java у нас есть ошибка 292278994 года.

4

Я не верю, что это повлияет на класс Java Date, как на программиста. Он уже использует 64-битные значения. Я вижу, что это проблема, если вы используете хранилище данных, которое все еще использует 32-битные значения. Я не ожидаю увидеть слишком много 32-битных ОС за 27 лет.

0

Это, вероятно, осталось от старых дней C, когда типы данных даты перевернулись в 2038 году. Может возникнуть проблема с некоторыми действительно приложениями, но не для Java. Йон.

1

Java и время не ограничены только классом Date.

Откуда берутся даты или время? Часто из System.currentTimeMillis, который является нативным методом. Обычно это не реализовано на Java. Тип возврата длинный, но это мало значит, поскольку собственный метод может возвращать любое значение, которое просто вписывается в длинный.

Все зависит от ОС и ее реализации JRE.

Чтобы полагаться на наличие 64-битных систем, вы можете быть наивными, поскольку, по-видимому, существует множество встроенных систем, которые являются 32-разрядными и будут по-прежнему оставаться.

В целом, Java подвергается проблеме 2038.

0

Это не совсем ответ. Но некоторые должности получили все правильно. Java соответствует требованиям 2038, но не соответствует 10000 (если вы вставляете длинный конструктор Date, который представляет что-то после 9999, он не будет работать и возвращает некоторое странное число), но да, 2147483648 определенно не является максимально допустимым значением в дате Java класс.