Как отформатировать LocalDate в строку?

158

У меня есть переменная LocalDate с именем date, при печати она отображает 1988-05-05 Мне нужно преобразовать это, чтобы напечатать как 05.May 1988. Как это сделать?

Ясько
источник
3
Посмотрите на класс DateTimeFormatter . Там даже есть примеры того, как конвертировать в и из Strings.
azurefrog
2
Вы должны показать какой-то код, что вы уже пробовали и что не работает, чтобы люди могли вам помочь.
bvidal
Я пытался это сделать, но из-за этой надоедливой вещи «она не соответствует нашим стандартам качества», от которой я наконец отказался, мне потребовалось 15 минут, чтобы опубликовать это, потому что я должен был исправить «i» с «I».
Ясько

Ответы:

307

SimpleDateFormat не будет работать, если он начинает с LocalDate, который является новым в Java 8. Из того, что я вижу, вы должны будете использовать DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ время / формат / DateTimeFormatter.html .

LocalDate localDate = LocalDate.now();//For reference
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLLL yyyy");
String formattedString = localDate.format(formatter);

Это должно быть напечатано 05 мая 1988 года. Чтобы получить период после дня и до месяца, вам, возможно, придется использовать «dd'.LLLL yyyy»

ProgrammersBlock
источник
4
Большое спасибо, это помогает, но с 'LLLL' не удалось показать название месяца, но с 'MMMM' я нашел это странным, поскольку даже в документации сказано иначе. Но еще раз спасибо за помощь ,
Яско
2
Теперь localDate.format (форматтер); не работает вообще
EngineSense
какую версию JDK вы используете @ProgrammersBlock
Lova Chittumuri
30

Может быть коротким как:

LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
Зон
источник
3
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));

Приведенный выше ответ показывает это на сегодня

Картик р
источник
ofPatterns нужен андроид O
Махди
0

С помощью постов ProgrammersBlock я придумал это. Мои потребности были немного другими. Мне нужно было взять строку и вернуть ее как объект LocalDate. Мне передали код, который использовал более старый Календарь и SimpleDateFormat. Я хотел сделать это немного более актуальным. Это то, что я придумал.

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;


    void ExampleFormatDate() {

    LocalDate formattedDate = null;  //Declare LocalDate variable to receive the formatted date.
    DateTimeFormatter dateTimeFormatter;  //Declare date formatter
    String rawDate = "2000-01-01";  //Test string that holds a date to format and parse.

    dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE;

    //formattedDate.parse(String string) wraps the String.format(String string, DateTimeFormatter format) method.
    //First, the rawDate string is formatted according to DateTimeFormatter.  Second, that formatted string is parsed into
    //the LocalDate formattedDate object.
    formattedDate = formattedDate.parse(String.format(rawDate, dateTimeFormatter));

}

Надеюсь, это кому-нибудь поможет, если кто-то видит лучший способ сделать это, пожалуйста, добавьте свой вклад.

Пит
источник
Я вижу лучший способ: просто LocalDate.parse(rawDate)! String.formatздесь используется в совершенно неправильной форме, фактически просто возвращает первую строку; DateTimeFormatterне используется вовсе; parseэто staticметод LocalDate; formattedDateэто не отформатированная дата, даже не String(как предложено в вопросе)
user85421
0

Существует встроенный способ форматирования LocalDate для JODA lib

import org.joda.time.LocalDate;

LocalDate localDate = LocalDate.now();
String dateFormat = "MM/dd/yyyy";
localDate.toString(dateFormat);

Если у вас его еще нет - добавьте это в build.gradle:

implementation 'joda-time:joda-time:2.9.5'

Удачного кодирования! :)

Inoy
источник
1
Не в соответствии с Javadoc.
Эдвард
@ Эдвард, если это не так, пожалуйста, докажите это и предложите решение, которое вы считаете лучшим.
Иной
1
Вы хотите, чтобы я доказал, что LocalDate.toString (шаблон String) НЕ существует? Пожалуйста, предоставьте ссылку на этот метод, если он существует - я не смог найти его ни в одном javadocs. Что касается решения, этот вопрос уже есть.
Эдвард
@ Эдвард, похоже, тебе трудно найти его. Обновил мой ответ.
Иной
Joda Time не является «встроенным». OP, кажется, использует java.time.LocalDate, а не joda.time
Эдвард
-11

Довольно хороший способ сделать это - использовать, SimpleDateFormatя покажу вам, как:

SimpleDateFormat sdf = new SimpleDateFormat("d MMMM YYYY");
Date d = new Date();
sdf.format(d);

Я вижу, что у вас есть дата в переменной:

sdf.format(variable_name);

Приветствия.

ном
источник
3
OP хочет распечатать содержимое LocalDateэкземпляра в определенном формате. Как мог SimpleDateFormatпомочь ему здесь?
Том