Почему бы не использовать MAC-адрес Вашей сетевой платы?
Хорошо, чтобы разобраться в этом, вы должны ознакомиться с тем, что на самом деле означает британское летнее время и когда оно было на месте. Чтобы сделать его короче, вы передаете 0L
в getName ()
, который равен 1970-01-01T00: 00: 00Z
, поэтому DefaultTimeZone
ищет название часового пояса в данный момент. Это было британское летнее время.
Источник: http://www.nmm.ac.uk/explore/astronomy-and-time/time-facts/british-summer-time
В 1968 году часы были продвинутый один час перед GMT 18 февраля и оставалось так до британского стандарта Время, в течение которого часы находились в продвижение по Гринвичу в течение всего года, вошло в силы с 27 октября 1968 г. по 31 г. Октябрь 1971 г.
Если бы вы вместо этого пропустили нужное количество миллисекунд с 1970-01-01T00: 00: 00Z
. например, выполнив
defaultTimeZone.getName(new GregorianCalendar().getTimeInMillis())
, вы также получите правильную строку. По сути, вы просто загрузили метод getName ()
с неправильным параметром, что привело к неожиданному результату.
Если вы хотите подробно проверить, проверьте файлы в org / joda / time / tz / src
источника joda, чтобы увидеть, как joda определяет часовые пояса.
Вместо
defaultTimeZone.getName(0L)
вы можете использовать
defaultTimeZone.toTimeZone().getDisplayName()
, который делает это за меня.
Возможно, вас заинтересует статический инициализатор для класса DateTimeZone в версии 1.6:
static {
setProvider0(null);
setNameProvider0(null);
try {
try {
cDefault = forID(System.getProperty("user.timezone"));
} catch (RuntimeException ex) {
// ignored
}
if (cDefault == null) {
cDefault = forTimeZone(TimeZone.getDefault());
}
} catch (IllegalArgumentException ex) {
// ignored
}
if (cDefault == null) {
cDefault = UTC;
}
}
Я предполагаю, что у вас определено свойство user.timezone
(и установлено в BST). В противном случае похоже, что Joda должен создать свой собственный экземпляр часового пояса на основе часового пояса JDK; и я ожидаю, что любые ошибки в этой области, особенно при преобразовании зоны по Гринвичу, уже будут обнаружены.