2010-10-14 4 views
8

Я новичок в java и, следовательно, не смог понять это с довольно долгого времени.JAVA TimeZone issue EDT Vs EST

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

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

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

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

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

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

Ожидает ответа.


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

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

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

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

    ноябрю

Но проблема в том, что когда я пишу свое машинное время в файл, это записывается как 2010 01 12 15:56:00 EST, если летнее время (DST) отсутствует и как 20101012 15:56:00 EDT , если присутствует DST. Моя забота о том, является ли это DST или нет, я хочу всегда писать EST.

+2

Если время в файле '20101012 15:56:00 EDT', вы хотите прочитать его как' 20101012 15:56:00 EST' или '20101012 14:56:00 EST'? Я отважусь на то, что вы вычисляете временные смещения, и вы сожжены изменениями времени. –

+2

Если это необходимо для ведения журналов, попробуйте ввести время в качестве UTC вместо этого. – Powerlord

ответ

3

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

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

время я печатаю это на: 2010 06 15 15:00:00 EDT

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

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

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

+0

Ха-ха ... Красивый пример. Ты прав. Но я имею дело с сервером, которому я должен сказать: «Выполняйте задачу в 20101015 15:30:30 xxx» xxx, являясь часовым поясом. Сервер понимает только EST, а не EDT в любом месяце. Следовательно, EDT является неудовлетворительным. – ViV

-1

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

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

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

0

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

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

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

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

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

2

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

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

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

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

0

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

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

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

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

  2. Ваше время машина установлена ​​в 2:15 вечера и летнего времени в по сути, и вы хотите, чтобы написать 1:15 полудня по восточному, вы должны использовать: TimeZone.setDefault (TimeZone.getTimeZone («EST»))

+0

Спасибо за ясность, которую вы принесли. Я бы посмотрел, чтобы реализовать вариант 1, жесткий это неправильный смысл. Можете ли вы, пожалуйста, уточнить, как я могу использовать SimpleDateFormat, чтобы написать его как 14:15 вечера EST! Спасибо – ViV

+1

Попробуйте System.out.println (новый SimpleDateFormat («yyyyMMdd hh: mm: ss a 'EST»). Format (yourDate)); и посмотреть результаты. Посмотрите на SimpleDateFormat javadoc на наличие у вас ошибочных букв шаблонов. –

0

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

+0

Ты очень прав Стивен. Отвечая на ваш вопрос, это то, как используется письменное время - я имею дело с сервером, которому я должен сказать: «Выполняйте задачу в 20101015 15:30:30 xxx» (это строка времени, которую я пишу в файл). xxx является часовым поясом. Сервер понимает только EST, а не EDT, какой бы месяц он ни был. Написание EDT как EST является неверным истолкованием факта, я согласен. Но я вроде как вынужден сделать это. – ViV

Смежные вопросы