У меня есть 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
java
date
date-format
user182944
источник
источник
yyyy-mm-dd
.Ответы:
Date
- это контейнер для количества миллисекунд, прошедших с эпохи Unix (00:00:00 UTC 1 января 1970 г.).В нем нет понятия формата.
Java 8+
LocalDateTime ldt = LocalDateTime.now(); System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt)); System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt)); System.out.println(ldt);
Выходы ...
05-11-2018 2018-05-11 2018-05-11T17:24:42.980
Java 7-
Вы должны использовать ThreeTen Backport
Оригинальный ответ
Например...
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
чтобы убедиться, что вы не используете неправильные шаблоны;)источник
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);
источник
java.util.Date
?'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
источник
tl; dr
LocalDate.parse( "01-23-2017" , DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) )
Детали
Как уже упоминалось, у
Date
класса нет формата. Он отсчитывает миллисекунды с начала 1970 года по всемирному координированному времени. Безвоздмездно.java.time
В других ответах используются старые устаревшие классы даты и времени, которые теперь вытесняются классами java.time.
Если у вас есть
java.util.Date
, преобразовать вInstant
объект.Instant
Класс представляет собой момент на временной шкале в формате UTC с разрешением наносекунд (до девяти (9) цифр десятичной дроби).Часовой пояс
Другие ответы игнорируют ключевой вопрос о часовом поясе. Для определения даты требуется часовой пояс. В любой момент дата меняется в зависимости от зоны земного шара. Через несколько минут после полуночи в Париже Франция - новый день, в то время как в Монреале Квебек все еще «вчера».
Определите часовой пояс, в котором вам нужен контекст для вашего
Instant
.ZoneId z = ZoneId.of( "America/Montreal" );
Примените,
ZoneId
чтобы получитьZonedDateTime
.LocalDate
Если вас интересует только дата без времени суток, извлеките
LocalDate
.Чтобы сгенерировать строку в стандартном формате ISO 8601, YYYY-MM-DD, просто вызовите
toString
. Классы java.time по умолчанию используют стандартные форматы при генерации / анализе строк.Если вам нужен формат ММ-ДД-ГГГГ, определите шаблон форматирования.
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 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Это просто использовать приведенные ниже коды.
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);
источник
Вы можете получить день, месяц и год и можете объединить их или использовать формат MM-dd-yyyy, как указано ниже.
Date date1 = new Date(); String mmddyyyy1 = new SimpleDateFormat("MM-dd-yyyy").format(date1); System.out.println("Formatted Date 1: " + mmddyyyy1); Date date2 = new Date(); Calendar calendar1 = new GregorianCalendar(); calendar1.setTime(date2); int day1 = calendar1.get(Calendar.DAY_OF_MONTH); int month1 = calendar1.get(Calendar.MONTH) + 1; // {0 - 11} int year1 = calendar1.get(Calendar.YEAR); String mmddyyyy2 = ((month1<10)?"0"+month1:month1) + "-" + ((day1<10)?"0"+day1:day1) + "-" + (year1); System.out.println("Formatted Date 2: " + mmddyyyy2); LocalDateTime ldt1 = LocalDateTime.now(); DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy3 = ldt1.format(format1); System.out.println("Formatted Date 3: " + mmddyyyy3); LocalDateTime ldt2 = LocalDateTime.now(); int day2 = ldt2.getDayOfMonth(); int mont2= ldt2.getMonthValue(); int year2= ldt2.getYear(); String mmddyyyy4 = ((mont2<10)?"0"+mont2:mont2) + "-" + ((day2<10)?"0"+day2:day2) + "-" + (year2); System.out.println("Formatted Date 4: " + mmddyyyy4); LocalDateTime ldt3 = LocalDateTime.of(2020, 6, 11, 14, 30); // int year, int month, int dayOfMonth, int hour, int minute DateTimeFormatter format2 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy5 = ldt3.format(format2); System.out.println("Formatted Date 5: " + mmddyyyy5); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(new Date()); int day3 = calendar2.get(Calendar.DAY_OF_MONTH); // OR Calendar.DATE int month3= calendar2.get(Calendar.MONTH) + 1; int year3 = calendar2.get(Calendar.YEAR); String mmddyyyy6 = ((month3<10)?"0"+month3:month3) + "-" + ((day3<10)?"0"+day3:day3) + "-" + (year3); System.out.println("Formatted Date 6: " + mmddyyyy6); Date date3 = new Date(); LocalDate ld1 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date3)); // Accepts only yyyy-MM-dd int day4 = ld1.getDayOfMonth(); int month4= ld1.getMonthValue(); int year4 = ld1.getYear(); String mmddyyyy7 = ((month4<10)?"0"+month4:month4) + "-" + ((day4<10)?"0"+day4:day4) + "-" + (year4); System.out.println("Formatted Date 7: " + mmddyyyy7); Date date4 = new Date(); int day5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getDayOfMonth(); int month5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getMonthValue(); int year5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getYear(); String mmddyyyy8 = ((month5<10)?"0"+month5:month5) + "-" + ((day5<10)?"0"+day5:day5) + "-" + (year5); System.out.println("Formatted Date 8: " + mmddyyyy8); Date date5 = new Date(); int day6 = Integer.parseInt(new SimpleDateFormat("dd").format(date5)); int month6 = Integer.parseInt(new SimpleDateFormat("MM").format(date5)); int year6 = Integer.parseInt(new SimpleDateFormat("yyyy").format(date5)); String mmddyyyy9 = ((month6<10)?"0"+month6:month6) + "-" + ((day6<10)?"0"+day6:day6) + "-" + (year6);`enter code here` System.out.println("Formatted Date 9: " + mmddyyyy9);
источник
Пожалуйста, измените месяц с маленького «мм» на заглавную «ММ», это будет работать. Для справки ниже приведен пример кода.
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);
источник
увидеть эти ..
дата форматирования
DateTimeFormatter
дата анализа
Мгновенно с зоной
источник