Подтвердить что ты не робот

Преобразование java.util.Date формата yyyy-mm-dd в mm-dd-yyyy

У меня есть java.util.Date в формате yyyy-mm-dd. Я хочу, чтобы он был в формате mm-dd-yyyy

Ниже приведен образец, который я опробовал для этого преобразования:

// Setting the pattern
    SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy");
    // myDate is the java.util.Date in yyyy-mm-dd format
    // Converting it into String using formatter
    String strDate = sm.format(myDate);
    //Converting the String back to java.util.Date
    Date dt = sm.parse(strDate);

Но вывод, который я получаю, не в формате mm-dd-yyyy.

Пожалуйста, дайте мне знать, как отформатировать java.util.Date от yyyy-mm-dd до mm-dd-yyyy

4b9b3361

Ответ 1

Date является контейнером для количества миллисекунд с эпохи Unix (00:00:00 UTC 1 января 1970 года).

У него нет понятия формата.

Например...

Date myDate = new Date();
System.out.println(myDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate));
System.out.println(myDate);

Выходы...

Wed Aug 28 16:20:39 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 16:20:39 EST 2013

Ни одно из форматирования не изменило базовое значение Date. Это цель DateFormatter s

Обновлен с дополнительным примером

На всякий случай первый пример не имеет смысла...

В этом примере используются два форматирования для форматирования одной и той же даты. Затем я использую те же самые форматиры для синтаксического анализа значений String до Date s. Полученный синтаксический анализ не изменяет способ сообщения Date.

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

try {
    Date myDate = new Date();
    System.out.println(myDate);

    SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy");
    SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd");

    // Format the date to Strings
    String mdy = mdyFormat.format(myDate);
    String dmy = dmyFormat.format(myDate);

    // Results...
    System.out.println(mdy);
    System.out.println(dmy);
    // Parse the Strings back to dates
    // Note, the formats don't "stick" with the Date value
    System.out.println(mdyFormat.parse(mdy));
    System.out.println(dmyFormat.parse(dmy));
} catch (ParseException exp) {
    exp.printStackTrace();
}

Какие выходы...

Wed Aug 28 16:24:54 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 00:00:00 EST 2013
Wed Aug 28 00:00:00 EST 2013

Кроме того, будьте осторожны с форматами. Познакомьтесь с SimpleDateFormat, чтобы убедиться, что вы не используете неправильные шаблоны;)

Ответ 2

SimpleDateFormat("MM-dd-yyyy");

вместо

SimpleDateFormat("MM-dd-yyyy");

потому что MM points Month, mm points minutes

SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);

Ответ 3

'M' (Столица) представляет месяц и 'm' (Простой) представляют минуты

Пример в течение месяцев

'M' -> 7  (without prefix 0 if it is single digit)
'M' -> 12

'MM' -> 07 (with prefix 0 if it is single digit)
'MM' -> 12

'MMM' -> Jul (display with 3 character)

'MMMM' -> December (display with full name)

Пример для минут

'm' -> 3  (without prefix 0 if it is single digit)
'm' -> 19
'mm' -> 03 (with prefix 0 if it is single digit)
'mm' -> 19

Ответ 4

TL;DR

LocalDate.parse( 
    "01-23-2017" , 
    DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)

Подробнее

У меня есть java.util.Date в формате yyyy-mm-dd

Как уже упоминалось, класс Date не имеет формата. С начала 1970 года в UTC насчитывается миллисекунд. Никаких строк.

java.time

В других ответах используются неприятные старые устаревшие классы времени, которые теперь вытесняются классами java.time.

Если у вас есть java.util.Date, конвертируйте в объект Instant. Класс Instant представляет момент на временной шкале в UTC с разрешением наносекунды (до девяти (9) цифр десятичной дроби).

Instant instant = myUtilDate.toInstant();

Часовой пояс

В других ответах игнорируется решающая проблема часового пояса. Для определения даты требуется часовой пояс. В любой данный момент дата изменяется по всему миру по зонам. Через несколько минут после полуночи в Париже Франция - новый день, еще "вчера" в Монреале Квебек.

Определите часовой пояс, в котором вы хотите использовать контекст для Instant.

ZoneId z = ZoneId.of( "America/Montreal" );

Примените ZoneId, чтобы получить ZonedDateTime.

ZonedDateTime zdt = instant.atZone( z );

LocalDate

Если вам нужна только дата без времени суток, извлеките LocalDate.

LocalDate localDate = zdt.toLocalDate();

Чтобы сгенерировать строку в стандартном формате ISO 8601, YYYY-MM-DD, просто вызовите toString. Классы java.time используют стандартные форматы по умолчанию при генерации/синтаксическом анализе строк.

String output = localDate.toString();

2017-01-23

Если вам нужен формат ММ-ДД-ГГГГ, определите шаблон форматирования.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );

Обратите внимание, что коды шаблонов форматирования чувствительны к регистру. Код в вопросе неправильно использовал mm (минута часа), а не mm (месяц года).

Использовать тот же объект DateTimeFormatter для синтаксического анализа. Классы java.time потокобезопасны, поэтому вы можете поддерживать этот объект и повторно использовать его даже по потокам.

LocalDate localDate = LocalDate.parse( "01-23-2017" , f );

О java.time

Структура java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятный старый legacy классы даты-времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь режим обслуживания, советуем перейти к классам java.time.

Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация JSR 310.

Где получить классы java.time?

  • Java SE 8 и SE 9 и позже
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть функций java.time возвращается на Java 6 и 7 в ThreeTen-Backport.
  • Android

Проект ThreeTen-Extra расширяет java.time с помощью дополнительных классов. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и больше.

Ответ 5

Измените небольшой месяц "мм" на капитал "ММ", он будет работать. Для справки ниже приведен пример кода.

  **Date myDate = new Date();
    SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");

    String strDate = sm.format(myDate);

    Date dt = sm.parse(strDate);
    System.out.println(strDate);**

Ответ 6

Это простое использование ниже кодов.

final Date todayDate = new Date();

System.out.println(todayDate);

System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(todayDate));

System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(todayDate));

System.out.println(todayDate);