2013-10-26 7 views
1

У меня есть приложение Java, запущенное на моем сервере Ubuntu в США и настроенное CEST Time Zone.Несоответствие часовых поясов в Java

Если я запускаю команду Date в терминале, она возвращает дату в CEST Zone time - это идеально.

Но в Java, если я запускаю следующий код

System.out.println (new Date()); 

Это возвращает меня время в EDT. Какую конфигурацию мне не хватает.

+0

см http://stackoverflow.com/questions/3010035/converting-a-utc-time-to-a-local-time -zone-в-Java? RQ = 1 – Justin

ответ

2

Вы должны быть осторожны при интерпретации объектов даты с экрана, который вы получаете в консоли, потому что они отформатированы с использованием TimeZone по умолчанию для виртуальной машины, на которой выполняется эта программа (которая по умолчанию наследует ее от часового пояса ОС). Конечно, вы можете поставить свой собственный TimeZone, как объяснено в ответе Йеспера. Но при этом я бы сильно рекомендую использовать идентификаторы часовых поясов IANA, такие как America/New_York вместо EST. Тем более что аббревиатуры, имеющие «стандарт», не учитывают дневную экономию.

Так что, если вы просто напечатаете объект даты на консоли, и вы не получите ожидаемого результата, вероятность того, что ваш часовой пояс сервера установлен на неправильное значение, или ваша ОС установлена ​​в неправильный часовой пояс.

Для изменения часового пояса JVM, вы можете использовать этот параметр при запуске

-Duser.timezone="America/New_York" 
0

Вы говорите, что сервер настроен на часовой пояс CEST, но согласно Java часовой пояс по умолчанию - EDT. Java получает часовой пояс по умолчанию от операционной системы, поэтому, вероятно, ваш сервер неправильно настроен в CEST.

Если вы хотите напечатать дату в определенном часовом поясе, используйте DateFormat и установите часовой пояс на нем:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); 
df.setTimeZone(TimeZone.getTimeZone("CET")); 
System.out.println(df.format(new Date())); 

Примечание: CEST не действует часовой пояс в соответствии с моей Java (Java 7u45). Вы имели в виду "CET"? (CEST - это летний вариант CET, но если вы используете CET, Java будет автоматически отображать время в летнее время, если это необходимо).

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