Преобразование объекта String Date в объект util.Date с шаблоном MM/dd/yyyy

Метод getStartDate возвращает объект типа util.Date. Мне нужен способ преобразовать «сегодня», который представляет собой объект даты типа String, в объект util.Date с форматом MM/dd/yyyy. Если я форматирую «сегодня» строку даты в объект Date, я получаю длинный формат даты.

public Date getStartDate() {

    try {
        System.out.println("startDate" + startDate); // prints Fri Jan 02 00:00:00 EST 1998

        DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
        String today = formatter.format(startDate);

        System.out.println("today" + today); // prints 02/01/1998 (I need to return Date object  in this format)

        DateFormat formatter2 = new SimpleDateFormat("MM/dd/yyyy");
        Date reformatedDate = formatter2.parse(today);

        System.out.println("reformatedDate" + reformatedDate); // Fri Jan 02 00:00:00 EST 1998

        return reformatedDate; 

    } catch (Exception e) {

    }
    return null;
}

person amal    schedule 05.06.2015    source источник
comment
Объект Date представляет дату, а не ее строковое представление. Не существует такой вещи, как короткий объект Date (если я неправильно понимаю ваш вопрос), только короткое строковое представление (которое вы получаете из объекта DateFormat).   -  person trooper    schedule 05.06.2015
comment
@trooper извините за путаницу. Я имел в виду короткий формат даты, такой как MM/dd/yyyy. Я не имел в виду тип данных Short.   -  person amal    schedule 05.06.2015
comment
правильно, вот что смущает. Дата - это дата - ее toString() выплевывает длинное представление (ваш переформатированныйDate).. если вам нужно короткое представление, используйте DateFormat (как вы делаете)... сам объект Date не несет эту информацию о форматировании . Кажется, вы хотите использовать его toString() для получения короткого формата?   -  person trooper    schedule 05.06.2015
comment
@trooper Я борюсь с этой проблемой со вчерашнего дня. Не могли бы вы опубликовать свое предложение в виде кода?   -  person amal    schedule 05.06.2015
comment
Попробуйте изменить Date reformatedDate = formatter2.parse(today); на Date reformatedDate = formatter2.format(today);   -  person Akash Rajbanshi    schedule 05.06.2015
comment
код, который вы разместили, не является неправильным. Ваш DateFormat преобразует вашу дату в строку с заданным представлением - это то, что вам нужно делать каждый раз, когда вы переходите к отображению даты - сам объект Date не несет информацию о форматировании, поэтому, если вы отформатируете свою строку обратно в дату, вы получаете полную дату (а не краткое представление).   -  person trooper    schedule 05.06.2015
comment
@AkashRajbanshi Я уже пробовал. Метод format() возвращает объект типа String. Но мне нужен объект типа Date в формате MM/dd/yyyy.   -  person amal    schedule 05.06.2015
comment
ЭТО проблема - вы вызываете toString на свой объект Date и возвращаете формат длинной строки. Решение простое — не вызывать toString! используйте DateFormat каждый раз, когда вам нужно отобразить дату.   -  person trooper    schedule 05.06.2015
comment
@trooper Вы имели в виду, что когда я печатаю дату с помощью sysout, она автоматически вызывает toString и конвертирует в длинную дату?   -  person amal    schedule 05.06.2015
comment
Да, эта строка System.out.println("reformatedDate" + reformatedDate); на самом деле System.out.println("reformatedDate" + reformatedDate.toString());... toString подразумевается всякий раз, когда вы используете объект, где ожидается строка. Преобразование даты в строку в формате, который вам нужен, является целью DateFormat.   -  person trooper    schedule 05.06.2015
comment
@солдат, окей. Понял тебя. Не могли бы вы помочь мне понять, как избежать вызова toString() и печатать в исходном формате. Пример кода будет решеткой   -  person amal    schedule 05.06.2015
comment
ну, вы действительно близки - вам нужна только первая половина вашего кода. Создайте свою дату, используйте DateFormat, чтобы получить строку, распечатайте эту строку, готово. Нет необходимости во второй части, где вы конвертируете строку обратно в дату (только для того, чтобы распечатать ее снова, используя toString). Делайте это дело DateFormat каждый раз, когда вам нужно отображать - держите объект Date без изменений, это ваше внутреннее представление.   -  person trooper    schedule 05.06.2015
comment
@trooper Мне нужно было это преобразование, потому что мой метод возвращает объект типа Date.   -  person amal    schedule 05.06.2015
comment
Давайте продолжим обсуждение в чате.   -  person trooper    schedule 05.06.2015
comment
@user2033382 user2033382 Пожалуйста, предоставьте код, где вызывается getStartDate(). Место, где важно форматирование, находится в этом коде, а не в коде getStartDate().   -  person pens-fan-69    schedule 05.06.2015


Ответы (1)


может сделать что-то вроде этого, чтобы проанализировать дату:

 Format formatter = new SimpleDateFormat("MM/dd/yyyy");
 String dateString = "02/01/1998";
 Date date = null;
 try {
    date = (Date)((DateFormat) formatter).parse(dateString);
 } catch (ParseException e) {
    e.printStackTrace();
 }
 Calendar calendar = Calendar.getInstance();
 calendar.setTime(date);
 int year = calendar.get(Calendar.YEAR);
 int month = calendar.get(Calendar.MONTH);
 int day = calendar.get(Calendar.DAY_OF_MONTH);
 String.format("%02d", month);
 String.format("%02d", day);

 String yourDate = month + "/" + day + "/" + year;
person GregH    schedule 05.06.2015
comment
да это я понял. Вам должно быть очень просто настроить формат, который вы хотели бы, и казалось, что вы уже знакомы с тем, как форматировать даты из исходного сообщения. это было полезно? С чем еще у вас проблемы? При необходимости я могу настроить формат даты, который вы используете. - person GregH; 05.06.2015
comment
Я старался изо всех сил до сих пор. Но, наконец, я получаю объект Date в формате длинной даты. Все, что мне нужно, это вернуть объект типа Date в формате MM/dd/yyyy. Если вы можете, пожалуйста, отрегулируйте его. спасибо - person amal; 05.06.2015
comment
Я обновил свой ответ, посмотрите - дайте мне знать, если у вас возникнут еще проблемы. Если вы считаете это полезным, пожалуйста, проголосуйте/примите, чтобы другие могли видеть - person GregH; 05.06.2015
comment
Конечно, я проголосую, если это помогло решить мою проблему. Спасибо еще раз - person amal; 05.06.2015
comment
Ваш метод возвращает объект String. Но все, что мне нужно, это объект типа Date в формате MM/dd/yyyy. Вы можете видеть, что мой метод getStartDate возвращает объект Date. - person amal; 05.06.2015
comment
Какова цель здесь? Вы хотите распечатать дату в формате, как показано? Использовать дату в более позднем методе, который будет использовать только день/месяц/год? В любом случае опубликованное решение должно быть тем, что вам нужно - person GregH; 05.06.2015