Создание объекта TimeZone в Java - PullRequest
3 голосов
/ 22 декабря 2010

Я создаю объект Java TimeZone, используя строку TimeZone String, например GMT-8, GMT, PST, EST и т. Д. При этом не учитывалось, включен ли часовой пояс для летнего времени или нет. Теперь необходимо включить эту проверку и вместо этогопри вводе данных в виде PDT или EDT летнее время задается в виде отдельного флага. Я не уверен, есть ли у TimeZone прямой метод для изменения свойства сохранения dayLight этого TimeZone.

Так что, если я получу вводкак PST и DaylightSaving как true, тогда я должен изменить строку как PDT. Что еще хуже, иногда я получу входные данные, такие как GMT-8 или GMT-6 с флагом дневного света как true или false.Есть ли выход?

Я не могу использовать сторонние классы, связанные с TimeZone

Пример кода:

TimeZone  timeZone = TimeZone.getTimeZone("EST");
TimeZone  timeZone = TimeZone.getTimeZone("PST");
TimeZone  timeZone = TimeZone.getTimeZone("GMT-8");

Ответы [ 4 ]

3 голосов
/ 22 декабря 2010

Строки часового пояса, такие как «PST» и «GMT-8», часто неоднозначны и часто не сообщают вам, действуют ли правила перехода на летнее время.(Например, «PST» означает «Стандартное тихоокеанское время» и «Стандартное время Пакистана».)

Если вы хотите, чтобы правила часового пояса и летнее время были правильными, вам необходимо использовать полные имена часовых поясов для получения объекта TimeZone;т.е. названия формы: "America / Los_Angeles".

В качестве альтернативы используйте значения даты / времени ISO 8601 .

Необходимо изменить много кодов и ихнемного трудно убедить других в получении одобрений.

Ну, я бы сказал, что у вас здесь мало выбора ... если вы хотите, чтобы ваш код корректировал часовые пояса и т. д.

Проведите некоторое исследование, разберитесь с проблемами, объясните проблему, которую ваш босс / клиент, и позвольте им выбрать между приложением, которое не может правильно выбрать летнее время, и тем, которое использует более разумноеформат даты и метод указания часового пояса.

2 голосов
/ 22 декабря 2010

Единственное, что я хотел бы добавить, это то, что использование трехбуквенных идентификаторов часовых поясов не рекомендуется, как показано ниже из JavaDoc .Вам нужно использовать имена, как показано здесь

Трехбуквенные идентификаторы часовых поясов

Для совместимости с JDK 1.1.x, некоторые другие трехбуквенныеТакже поддерживаются идентификаторы зон (такие как «PST», «CTT», «AST»).Однако их использование не рекомендуется, потому что одна и та же аббревиатура часто используется для нескольких часовых поясов (например, «CST» может быть «Центральное стандартное время США» и «Стандартное китайское время»), и тогда платформа Java может распознавать только одно изих.

1 голос
/ 01 января 2011

Вы на самом деле не "строите" TimeZone с примером кода, который вы показываете. Вы выбираете тот, который уже настроен на платформе Java.

И эти встроенные объекты TimeZone уже имеют соответствующую информацию о том, используется ли летнее время, когда оно запускается и т. Д. Все это атрибуты выбранного вами часового пояса.

Как уже упоминалось в другом комментарии, эти атрибуты встроенных объектов TimeZone время от времени меняются. Обновления среды выполнения Java фиксируют эти изменения.

Если вы действительно хотите построить новый экземпляр TimeZone, есть подкласс SimpleTimeZone , который, кажется, имеет полезные конструкторы. Но так ли это, что вы не можете использовать встроенные часовые пояса? Похоже, вы берете на себя большую работу, чем необходимо. TimeZone.getAvailableIDs () выдаст вам список имен TimeZone в вашей среде выполнения Java.

1 голос
/ 22 декабря 2010

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

Так что, если вы попытаетесь отформатировать определенный объект Date с этим часовым поясом, выходные данные должны отражать летнее время.

Работает ли это надежно (учитывая частые изменения в этой области), я не знаю.Вам, вероятно, следует обновить систему до последней версии JVM, чтобы получить новейшие файлы базы данных часовых поясов (если вы не можете сделать это, есть отдельный инструмент обновления часовых поясов ).

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