2015-01-23 2 views
1

Я хочу, чтобы сохранить дату в определенном формате, ниже мой код:Почему моя дата не получает отформатирован в соответствии с DateFormat

уровень Класс:

Date timestampbackup; 

Местный уровень Метод:

java.util.Date date= new java.util.Date(); 
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    String fechaStr = (new Timestamp(date.getTime())).toString(); 

    System.out.println("fechaStr "+fechaStr.toString()); 

    timestampbackup = format.parse(fechaStr); 

    System.out.println("timestamp "+timestampbackup.toString()); 

и вот результат:

 fechaStr 2015-01-23 17:54:25.465 
     timestamp Fri Jan 23 17:54:25 GMT+05:30 2015 

Что, возможно, неправильно?

+0

Как вы думаете, как использовать 'SimpleDateFormat # format()'? –

+1

'timestampbackup = format.parse (fechaStr);' ?? – User3

+1

Не делайте этого: новая временная метка (date.getTime())). ToString() – Stefan

ответ

3

This:

String fechaStr = (new Timestamp(date.getTime())).toString(); 

работает независимо от формата, который вы создали. Timestamp - это пакет java.sql, поэтому его метод toString() возвращает дату в стандартном формате SQL.

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

Затем вы используете

timestampbackup = format.parse(fechaStr); 

который принимает строку даты, которая была создана и разбирает его, и помещает его в timestampbackup объекта. Теперь ваш timestampbackup - это java.util.Date, а не java.sql.Date, что хорошо, но это означает, что его метод toString() работает в соответствии со стандартом по умолчанию для вашей локали.

Разбор создавал объект даты, который хранит информацию внутренне с течением времени, прошедшим с момента начала. Поэтому синтаксический анализ с использованием формата не повлияет на то, как отображается дата. Любая информация о форматах теряется.

Поэтому вы должны использовать format.format(timestampbackup), а не timestampbackup.toString(), чтобы получить нужную вам строку. И вообще не имеет значения, из чего он разбирался.

+0

Отличная проницательность Я изменил код :) – User3

1

Возможно, вы сделали некоторые ошибки, а затем использовали toString(). Следующий код работает хорошо для меня. Просто используйте ft.format(), чтобы получить строку с отформатированным временем.

Date dNow = new Date(); 
    SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss"); 
    System.out.println(ft.format(dNow)); 
1

Вы должны использовать: format.format(<your date>)