Форматирование даты с использованием только даты и месяца?

Мне нужно построить дату, которая будет отображать только день и месяц, например:- 23 декабря. У меня есть только значение дня и месяца, но как мне использовать SimpleDateFormat для создания форматированной даты с таким форматом, как "dd-MMM". Как я изменил приведенный ниже метод для возврата отформатированной даты?

public String formatDate(String day, String month, String year) {
        // Do something with the date chosen by the user
        SimpleDateFormat df = new SimpleDateFormat("dd-MMM");
    }

Предположим, если я вызову вышеуказанный метод, такой как formatDate ("11", "1", ""), тогда он должен вернуть мне "11 Jan".

2 ответа

Решение

Это должно работать:

Значение года установлено в 0, так как у вас его нет, но вы можете передать его в метод set.

public String formatDate(String day, String month, String year) {
  // Do something with the date chosen by the user
  SimpleDateFormat df = new SimpleDateFormat("dd-MMM");

  Calendar c = Calendar.getInstance();
  c.set(0, Integer.parseInt(month)-1, Integer.parseInt(day));
  return df.format(c.getTimeInMillis());

}

ТЛ; др

MonthDay.of( Month.JANUARY , 23 )
        .toString() 

…или же…

MonthDay.of( Month.JANUARY , 23 )
        .format( DateTimeFormatter.ofPattern( "dd MMM" ) ) 

MonthDay

Если вы хотите представлять месяц и день месяца без какого-либо года, используйте MonthDay учебный класс. Создан только для этой цели.

Стандартный формат ISO 8601 для месяца и дня - "-MM-DD". Аналогично формату даты "ГГГГ-ММ-ДД", но с дефисом, заменяющим год.

Классы java.time по умолчанию используют форматы ISO 8601 при разборе / генерации строк. Поэтому нет необходимости указывать шаблон форматирования для таких строк. Для вашего пользовательского формата мы должны определить форматер. Я предлагаю придерживаться форматов ISO 8601, когда это возможно.

MonthDay md = MonthDay.of( 12 , 23 );
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM" );
String output = md.format( f );

md.toString (): --12-23

выходной: 23 декабря

Смотрите живой код в IdeOne.com.

Ваш Вопрос противоречит самому себе, в одном месте отображается дефис в желаемом формате, а в другом - ПРОБЕЛ. Если вы хотите пробел, используйте DateTimeFormatter.ofPattern( "dd MMM" ),


О java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые классы даты и времени, такие как java.util.Date, Calendar & SimpleDateFormat,

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

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

Другие вопросы по тегам