Я хочу получить отформатированную дату в Java

Я хочу получить новый Date объект с SimpleDateFormat применяется к нему. Я хотел бы сделать что-то вроде:

SimpleDateFormat myFormat = new SimpleDateFormat("dd MMM yyyy kkmm");
Date today = new Date();
today = myFormat.format(today);

Я не могу этого сделать, потому что сегодня Date, а также format возвращает String, Я также попробовал:

Date today;
SimpleDateFormat myFormat = new SimpleDateFormat("dd MMM yyyy kkmm");
try{
    today = myFormat.parse((new Date()).toString());
}catch(Exception e){

}

Это не хорошее решение, потому что, когда я пытаюсь использовать сегодня в другом месте, Java жалуется, что сегодня, возможно, не был создан экземпляр. Каков хороший способ изменить формат объекта Date (сохраняя при этом объект Date и не превращая его в строку)?

5 ответов

Решение

Вы неправильно смотрите формат и дату.

  • Дата не содержит формат. Date - это просто класс, содержащий информацию о дате, такую ​​как дата, месяц, часы, секунды и т. Д.
  • SimpleDateFormat - это тот, который сообщает вам строковое представление Date. Но нет даты, связанной с этим.

Таким образом, идея заключается в том, что когда вам нужно отобразить дату или сохранить дату в некотором строковом представлении, вы будете использовать SimpleDateFormat и передавать ему дату, для которой вы хотите строковое представление.

Одним из преимуществ такого способа является то, что я могу использовать один и тот же объект Date и отображать два разных строковых представления (используя два разных экземпляра SimpleDateFormat). И также наоборот, определив один экземпляр SimpleDateFormat, я могу форматировать несколько дат.

Редактировать:

Теперь, если вы хотите снять некоторую информацию с даты. использование

Calendar rightNow = Calendar.getInstance();
Calendar cal = new GregorianCalendar(
   rightNow.get(YEAR),
   rightNow.get(MONTH),
   rightNow.get(DAY_OF_MONTH));
Date now = cal.getTime();

Есть и другие хорошие солны вроде JodaTime

Ref:

Gregorian Календарь Календарь Joda Time

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

Выполните всю обработку в самом объекте Date и при отображении одного изменения в нужный формат,

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

Я думаю, что вы пытаетесь достичь не имеет смысла.

Date объект представляет время. Вы не можете отформатировать его. Но вы можете получить его строковое представление в определенном формате. Как с myFormat.format(today),

Я думаю, что вы что-то не так поняли о том, что Date Объект есть. Date просто хранит информацию о моменте времени - у нее вообще нет формата. Когда дело доходит до String представление Dateвот где форматирование вступает в игру. Заботьтесь о форматировании, только когда вы:

  1. Разбор String представление в Date объект.
  2. Преобразование Date Вернуться в String представление, чтобы отобразить его определенным образом.
Другие вопросы по тегам