2013-08-28 1 views
41

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

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

// 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

+2

Что вы имеете в виду, когда говорите .. У меня есть java.util.Date в формате yyyy-mm-dd? – Jayamohan

+0

Это означает, что нынешний формат в моем коде для отображения его в пользовательском интерфейсе - 'yyyy-mm-dd'. – user182944

+1

Пожалуйста, измените малый миллиметр на MM – Dilip

ответ

94

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. Получившийся синтаксический разбор не изменяет способ представления 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, чтобы убедиться, что вы не используете неправильные модели;)

23
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); 
+0

Помимо этого изменения, любое другое изменение, которое мне нужно сделать в вышеупомянутом методе утилизации? Я не могу проверить это сразу, поэтому спрашиваю об этом. Кроме того, есть ли лучший способ форматирования 'java.util.Date'? – user182944

+0

@ user182944 Вы можете проверить это самостоятельно здесь http://ideone.com/ –

12

«M» (капитал) представляют месяц & «M» (Simple) представляют минуты

Некоторые пример в течение нескольких месяцев

'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 
+0

Хорошее объяснение ... – newuser

0

Пожалуйста, измените маленький «мм» месяц в столицу «мМ» будет work.for ссылку ниже пример кода.

**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);** 
1

TL; др

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

Детали

У меня есть java.util.Date в формате гггг-мм-дд

В другом упоминалось, класс Date не имеет формата. С начала 1970 года в UTC насчитывается миллисекунд. Безвоздмездно.

java.time

Другие ответы использовать проблемные старые классы наследства даты и время, в настоящее время вытеснены классами java.time.

Если у вас есть java.util.Date, обращайтесь к объекту Instant. Класс Instant представляет момент на временной шкале в UTC с разрешением nanoseconds (до девяти (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, теперь в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: 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 и more.

0

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

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); 
+0

(A) Этот код игнорирует решающую проблему часовых поясов. (B) В этом коде используются трудоемкие старые классы времени, которые были устаревшими уже много лет. Избежать их. Поставляется с помощью классов java.time. –

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