2013-07-01 7 views
0

Мне нужно получить текущее время в часовом поясе «EDT». Я получил текущее время и отформатировал его в «EDT», я получаю время, как я хотел. Но когда я попытался разобрать его на дату в часовом поясе «EDT», я все равно получаю время в формате «IST» после разбора даты. Я не знаю, что я делаю неправильно.Преобразование часового пояса в «EDT» в Java

Date date = new Date(); 

String format = "MM/dd/yyyy hh:mm:ss Z"; 

DateFormat formatter = new SimpleDateFormat(format); 

formatter.setTimeZone(TimeZone.getTimeZone("America/New_York")); 

String dateString = formatter.format(date); 
System.out.println(dateString); 

try {  System.out.println(formatter.parse(dateString)); 
}  

catch (ParseException e) { 
    e.printStackTrace(); 
} 
+1

EDT не является часовым поясом. Это * часть * восточных часовых поясов, но она не действует большую часть года. Проблема человека заключается в том, что вы все еще печатаете 'Date.toString', хотя * всегда * использует часовой пояс системы по умолчанию. Значение «Дата» * не имеет часового пояса *. –

+0

Календарный экземпляр = Calendar.getInstance (TimeZone.getTimeZone («Америка/Нью-Йорк»)); System.out.println (instance.getTimeZone()); System.out.println (instance.getTime()); ** Выход: ** Восточное стандартное время Пн июл 01 18:02:10 IST 2013 – Sarath

+0

Предварительно «Восточное стандартное время» является результатом 'TimeZone.toString()'. Часть IST объясняется моим предыдущим комментарием. –

ответ

0

Классы java.util.Date и .Calendar, как известно, являются хлопотными. Избежать их. Вместо этого используйте Joda-Time или пакет java.time в Java 8 (вдохновленный Joda-Time).

В отличие от java.util.Date, DateTime в Joda-Time знает свой собственный часовой пояс. Если вы не укажете часовой пояс, будет назначен часовой пояс JVM по умолчанию.

Вы можете преобразовать объект java.util.Date и из него в случае необходимости для использования с другими классами.

java.util.Date date = new Date(); 

DateTimeZone timeZone = DateTimeZone.forID("America/New_York"); 
DateTime dateTimeNewYork = new DateTime(date, timeZone); 
DateTime dateTimeIndia = dateTimeNewYork.withZone(DateTimeZone.forID("Asia/Kolkata")); 
DateTime dateTimeUtc = dateTimeNewYork.withZone(DateTimeZone.UTC); 

Вызвать метод toString на этих объектах DateTime, чтобы увидеть свою собственную временную зону, используемой для генерации строки с помощью толкового ISO 8601 стандартного формата. Вы можете использовать и другие форматы в Joda-Time.

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