Подтвердить что ты не робот

Timestamp.valueOf() возвращает другое значение в соответствии с версией JVM

Timestamp sTs = Timestamp.valueOf("1900-12-31 23:59:59.999"); // Make Timestamp
System.out.println("sTs====>" + sTs.getTime());

sTs====> -2177485200001  // in jdk 1.4


Timestamp sTs = Timestamp.valueOf("1900-12-31 23:59:59.999"); // Make Timestamp
System.out.println("sTs====>" + sTs.getTime());

sTs====> -2177483400001  // in jdk 1.5

Почему два значения отличаются?

4b9b3361

Ответ 1

В соответствии с удаленной записью на веб-сайте Sun

Летнее время (DST) - это система обработки изменяющихся количество дневного света в течение года. Цель DST - максимально использовать дневные часы, доступные в обычные часы бодрствования. От регулируя часы впереди стандартного количества, обычно час, люди могут имеют больше дневного света в течение их типичного рабочего дня. Для Например, предположим, что вы просыпаетесь ежедневно в 7:00. В spring солнце поднимается раньше каждый день. Вместо того, чтобы просыпаться в 6:00 преимущество дневного света, наблюдатели ДСТ двигают свои часы вперед час. Эффект заключается в том, что они могут продолжать пробуждаться в 7:00 утра в соответствии с часами и наслаждаться более дневным светом. Осенью люди установите часы на час назад, когда восход солнца происходит каждый день.

США планировали изменить начало своего ДСТ в 2007 году. Закон об энергетической политике 2005 года предусматривает, что DST начнется второе воскресенье марта и конец в первое воскресенье ноября. В 2007, даты начала и окончания будут 11 марта и 4 ноября, соответственно. Эти даты отличаются от предыдущего старта DST и даты остановки. В 2006 году датами было первое воскресенье апреля (апрель 2, 2006) и в последнее воскресенье октября (29 октября 2006 г.).

Java Runtime Environment (JRE) хранит правила соблюдения DST по всему миру. Старшие JRE будут иметь устаревшие правила, которые будут замененный Законом об энергетической политике от 2005 года. В результате заявки работа на старшей JRE может сообщать о некорректном времени с 11 марта 2007 г. до 2 апреля 2007 года и с 29 октября 2007 года по 4 ноября, 200

Изменения были обновлены в Java 1.4.2_13. Поэтому, если ваша версия старше, тогда вы увидите другое поведение.

Ответ 2

Я думаю, это связано с тем, что 1.4, вероятно, не поддерживает исторические изменения в часовом поясе (http://www.timezoneconverter.com/tzchist.html). Проблема в том, что Timestamp анализирует время в локальном часовом поясе и часовом поясе в вашем регионе в 1900 году было разным, что 1.4 не учитывал, но 1.5 сделал