2013-04-15 3 views
0

Я хочу конвертировать дату в "indies time". В частности: «Азия/Калькутта».Преобразование даты Java в другое время как формат даты

Код:

// TODO Auto-generated method stub 
Date date=new Date(); 
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); 

String dateString=simpleDateFormat.format(date); 

System.out.println("Currect Date : " + dateString); 
// This is returning a string and I want a date. 

System.out.println("Wrong Output : "+simpleDateFormat.parse(dateString)); 
//This returns a Date but has incorrect result. 

Вот выход из приведенного выше кода:

Correct Date : 2013-04-15 15:40:04 
Wrong Output : Mon Apr 15 03:10:04 MST 2013 

Я хочу ДАТУ, а не строки, но когда я получить дату, время 3:10, и когда я получаю строку, я получаю 15:40:04. Почему это не одно и то же?

+0

Просто для добавления других объектов ... Объект Date просто представляет точку во времени и содержит ** ** ** Знания TZ, даже если вы, возможно, создали его с помощью объекта SimpleDateFormat, который ** ** знает о TZ. Всякий раз, когда вы конвертируете дату в ее строковое представление, необходимо использовать TZ, чтобы знать, как это должно быть показано. Поскольку Date не знает TZ, когда вы вызываете 'date.toString()', как вы это делали неявно, у него нет другого выбора, кроме как предполагать, что вы имеете в виду ** default ** TZ. Вы должны отформатировать его, используя SDF, который знает TZ вместо того, чтобы полагаться на метод toString() 'Date. – Blake

ответ

1

Анализировать возвратит DateObject, поэтому вызов:

System.out.println("Wrong Output : "+simpleDateFormat.parse(dateString)); 

несколько напоминает:

Date d1 = simpleDateFormat.parse(dateString); 
System.out.println("Wrong Output : "+d1.toString()); 

Помните разбор даты только для разбора строки для создания объекта даты, если вы хотите отобразить его в определенном формате, использовать этот объект даты и вызвать sdf.format на нем. , например.

String dateStringOut=simpleDateFormat.format(d1); 
System.out.println("Output : "+dateStringOut); 
1

Date не содержит никакого форматирования. Это просто Date. Поэтому вы не можете конвертировать ваш объект Date между различными форматами вывода. Когда у вас есть дата, нет необходимости пытаться преобразовать ее в другой формат. Как форматировать, решено, когда вы конвертируете его в String с SimpleDateFormat. Поэтому, как только вы разобрали свой Date, просто держите его, пока вам не понадобится отформатировать его для вывода.

+0

Когда хранилище даты в базу данных, я не буду хранить ее в часовом поясе. –

+0

Если 'dateString' уже производит правильный формат, тогда в чем проблема? – NilsH

+0

, когда я разбираю его, возвращаю строку, но затем эта строка не будет конвертироваться в Date в индийское время. –

0

Использовать статическую функцию getDateTimeInstance (int dateStyle, int timeStyle) класса DateFormat. Дополнительную информацию см. В разделе DateFormat Class. Это может вам помочь.

+0

Это не решит цель. –

2

parse() анализирует текст даты и строит объект Date, который является длинным значением. Синтаксический анализ() Javadoc говорит

The TimeZone value may be overwritten, depending on the given pattern and 
the time zone value in text. Any TimeZone value that has previously been 
set by a call to setTimeZone may need to be restored for further operations. 

Вашей синтаксический анализ Дата объект печатается с помощью вызова ToString() на дату, которая была распечатан его в часовом поясе MST. Если вы конвертируете его из MST в IST, вы получите метку времени, которую вы ожидаете. Итак, ваш результат правильный. Все, что вам нужно сделать, это форматирование и печать длинного значения даты с использованием правильного часового пояса.

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