JAVA TimeZone выпуск EDT против EST - PullRequest
       8

JAVA TimeZone выпуск EDT против EST

9 голосов
/ 14 октября 2010

Я новичок в Java и, следовательно, не могу понять это уже довольно давно.

Я использую Windows XP, и машина настроена на TimeZone: Eastern Time (US &Канада) .

У меня есть приложение Java, которое берет информацию о текущем системном времени и часовом поясе и записывает в файл строку типа: 20101012 15:56:00 EST.

Последний фрагмент даты выше, т.е. часовой пояс, меняется с EST на EDT, когда я меняю системную дату.

Если быть точным: с ноября (например, ноябрь 2009 г.) до марта (март 2010 г.) этоEST, иначе EDT.

EST - это то, что я хочу ВСЕГДА , а не EDT.

Существует ли какой-то определенный класс / функция, с помощью которого явсегда можете прочитать его как EST?

В ожидании ответа.


Спасибо за ваши ответы.Ну, я забыл упомянуть несколько вещей.

  1. Я хочу, чтобы для моей машины было установлено: Восточное время (США и Канада) в настройках часового пояса Windows.

  2. Простыми словами, Что я хочу сделать, это: получить мое машинное время и записать его в текстовый файл

  3. Я знаю о летнем времени, которое происходит с марта по ноябрь.

Но проблема в том, что когда я записываю машинное время в файл, оно записывается как 2010 01 12 15:56:00 EST, если летнее время (DST) отсутствует, и как 20101012 15:56:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ, если DST присутствует.Меня беспокоит, будет ли это летнее время или нет, я хочу всегда писать EST.

Ответы [ 6 ]

3 голосов
/ 14 октября 2010

Я не думаю, что вам следует делать то, что вы предлагаете.

Вы говорите, что независимо от того, какой часовой пояс вашей системы в настоящее время (восточное время - это НЕ ваш часовой пояс, но UTC + 5 или +4есть), вы хотите, чтобы он отображал EST.Это просто неправильно.Предположим, что это лето, и ваш компьютер считает, что 2010/6/15 15:00 локально.Вы печатаете текущее время, и вы получаете:

Время, когда я распечатываю это по адресу: 2010 06 15 15:00:00 EDT

По какой-то причине вы думаете,что EDT неприятен, и поэтому вы меняете его на EST:

Я распечатываю это по адресу: 2010 06 15 15:00:00 EST

однако, еслиЗатем вы отправите этот фрагмент кому-то еще в течение следующего часа, и он будет вынужден думать, что вы путешествовали из будущего!С 15:00:00 EST 16:00:00 EDT.

2 голосов
/ 14 октября 2010

Я бы создал пользовательскую зону:

TimeZone alwaysEst = TimeZone.getTimeZone("EST+5");

Это будет указано как EST и всегда будет на 5 часов раньше UTC.В частности, не выбирайте существующий часовой пояс, иначе со временем обновление зоны будет изменено.

Имейте в виду, что при принудительной установке EST даты, которые вы регистрируете, будут совпадать только с временем, отображаемым системой для5 месяцев в году.Остальные 7 месяцев у вас будет час.Это может упростить синтаксический анализ файла, но может запутать пользователей.

0 голосов
/ 14 октября 2010

Решение зависит от того, почему вы пишете это время и что вы хотите с ним делать, когда вы читаете его обратно (для чего он будет использоваться, а не «что вы хотите»). Всегда записывать это как EST - это искажение фактов. Когда действует EDT, это , а не , фактически EST. Если вы пытаетесь отследить какой-то «абсолютный» момент времени, я рекомендую работать в GMT вместо любого часового пояса.

0 голосов
/ 14 октября 2010

Ваш вопрос все еще не ясен.

Я не понял, если вы просто хотите принудительно использовать символы 'EST', даже если ваша машина настроена на автоматическую проверку DST, или вы хотите получить фактическое время на EST.

Итак, у вас есть два варианта:

  1. Ваше машинное время установлено на 14:15 и DST включен, и вы хотите написать 14:15 EST (что не является точным фактическим временем), вам следует использовать SimpleDateFormat. Таким образом, вы будете лгать о времени. Но, в любом случае, вы знаете, что лучше всего подходит для вас.

  2. Ваше машинное время установлено на 14:15, а летнее время включено, и вы хотите записать 13:15 EST, вам следует использовать: TimeZone.setDefault (TimeZone.getTimeZone ("EST")) *

0 голосов
/ 14 октября 2010

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

Если вы хотите, чтобы это был определенный часовой пояс, а не часовой пояс по умолчанию / системный, вы можете принудительно установить TimeZone на EST с помощью чего-то вроде:

TimeZone est = TimeZone.getTimeZone("EST");

Хотя, как Майкл упоминал выше, в документации рекомендуется использовать местное полное имя, такое как «Америка / Нью-Йорк», а не общее сокращение часового пояса.

Если вы хотите утверждать, что это действительно EST, даже если выЕсли вы знаете, что это EDT, то, я полагаю, вы могли бы сделать следующее: использовать экземпляр SimpleDateFormat с пользовательским шаблоном, который не содержит информацию о часовом поясе, а затем прикрепить «EST» к концу записываемой строки.

0 голосов
/ 14 октября 2010

на машине установлен часовой пояс: восточное время (США и Канада).

Это не реальный часовой пояс (равно как EDT и EST).Часовой пояс (как понимается Java) - это что-то вроде «Америка / Феникс», который представляет собой идентификатор административного часового пояса, который имеет как базовое смещение, так и (необязательно) переключается на летнее время в определенные даты.И то, и другое может измениться, и эти интерпретации необходимо учитывать при интерпретации исторических дат.

Таким образом, если вы не хотите использовать переключатели DST, выберите часовой пояс, который не соблюдает DST.Возможно, что такого часового пояса не существует, и попытка действовать так, как если бы он был, вводит невозможные даты.

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