Преобразование EST в EDT или наоборот в Java - PullRequest
0 голосов
/ 22 марта 2012

Кто-нибудь может рассказать о трех вещах:

  1. Как извлечь TimeZone из экземпляра java.util.Date?
  2. Как узнать, применимо ли летнее время?Я полагаю, что могу узнать это, выполнив timeZone.getDSTSavings, но проблема, с которой я сталкиваюсь, заключается в том, что даже если я укажу дату в моей системе 1 февраля 2012 года, я все равно получу положительное значение (я думаю, 3600000)
  3. Как перевести время EST в EDT или наоборот?

Ответы [ 4 ]

6 голосов
/ 22 марта 2012

Как извлечь TimeZone из экземпляра java.util.Date?

Там нет такой вещи. Date просто представляет количество миллисекунд, прошедших с эпохи Unix, которая была полуночью 1 января 1970 года по UTC. Это не связано с определенной системой календаря или часовым поясом. Другими словами, если мы с другом разговариваем по телефону (с нулевой задержкой;) и я щелкаю пальцами, мы оба договоримся о Date, при котором этот щелчок тоже место - даже если я используя григорианский календарь, он использует юлианский календарь, и даже если я в Лондоне и он в Нью-Йорке. Это то же самое мгновенное время .

Как узнать, применимо ли переход на летнее время? Я полагаю, что я могу узнать это, выполнив timeZone.getDSTSavings, но проблема, с которой я сталкиваюсь, заключается в том, что даже если я укажу дату в моей системе на 1 февраля 2012 года, я все равно получаю значение как положительный (я думаю, 3600000)

В идеале используйте Время Joda вместо java.util.Date / Calendar / TimeZone, но в пределах TimeZone вы можете использовать TimeZone.getOffset(long), чтобы найти смещение от UTC или TimeZone.inDaylightTime(Date), чтобы просто дать вам ответ да / нет.

Как перевести время EST в EDT или наоборот?

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

0 голосов
/ 28 марта 2017

Я столкнулся с подобной проблемой.Следующее решение в Matlab, но вызывает Java, и мои изменения - просто комментарии, потому что я работаю со значениями datenum Matlab.В действительности вы не сможете преобразовать значения с учетом часового пояса, поскольку они являются одним и тем же часовым поясом, но это может помочь с необработанными значениями, которые не учитывают часовой пояс.

%c1 GregorianCalendar of now
%c2 GregorianCalendar of date in question
tz1 = c1.getTimeZone; %Note t2 would be the same

in1 = tz1.inDaylightTime(c1.getTime);
in2 = tz1.inDaylightTime(c2.getTime);

if (in1 == in2)
    %do nothing
elseif in1
    %c1 EDT, c2 is EST
    %Subtract 1 hour to c2
else
    %c1 EST, c2 EDT
    %Add 1 hour to c2
end
0 голосов
/ 15 мая 2013
  1. Как извлечь TimeZone из экземпляра java.util.Date?

Вы можете просмотреть часовой пояс экземпляра объекта Date, просмотрев его в toString () формат.Такие как «ср 01 мая 12:00:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2013».

Как узнать, применимо ли летнее время? Я полагаю, я могу узнать это, выполнив timeZone.getDSTSavings, но проблема, с которой я сталкиваюсь, заключается в том, что даже если я введу дату в моей системе 1 февраля 2012Тем не менее я получаю положительное значение (я думаю, 3600000) 3. Как преобразовать время EST в EDT или наоборот?Это важный вопрос, который у меня есть

Объект Date будет автоматически учитывать EDT / EST.Например, если у вас есть экземпляр объекта Date на 28 ноября, то toString () будет включать EST, а не EDT.

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

0 голосов
/ 22 марта 2012

Дата хранит время в миллисекундах с эпохи 1970 года, поэтому не содержит информацию о часовом поясе. У вашей JVM есть набор языковых стандартов, который определяет, как будет отображаться эта дата.

Если вы хотите узнать, какую TimeZone установила ваша JVM, вызовите 'TimeZone.getDefault ()'

Если у вас есть объект TimeZone, вы можете вызвать ряд функций, чтобы определить, применимо ли для этого часового пояса летнее время к определенной дате:

  • inDaylightTime (дата)

Чтобы (грубо) определить разницу между двумя часовыми поясами:

long edtOffset = TimeZone.getTimeZone("EDT").getOffset(date.getTime());
long estOffset = TimeZone.getTimeZone("EST").getOffset(date.getTime());
long diff = estOffset - edtOffset;

Хотя я не уверен, насколько это верно, поскольку EST и EDT являются взаимоисключающими, и даст ли приведенный выше код даже интересующий вас результат (я его не проверял)

...