Форматирование даты с использованием только даты и месяца?
Мне нужно построить дату, которая будет отображать только день и месяц, например:- 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
- Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
- Смотрите Как использовать...
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь, такие как Interval
, YearWeek
, YearQuarter
и многое другое.