Como formatar LocalDate para string?

156

Eu tenho uma variável LocalDate chamada date; quando imprimo, ela exibe 05/05/1988.

Jasko
fonte
3
Dê uma olhada na classe DateTimeFormatter . Ele ainda tem exemplos de como converter de e para Strings.
precisa saber é o seguinte
2
Você deve mostrar algum código, o que você tentou até agora e o que não está funcionando para que as pessoas possam ajudá-lo.
bvidal
Eu tentei fazer isso, mas por causa dessa coisa irritante de "não atender aos nossos padrões de qualidade", eu finalmente desisti, levei 15 minutos apenas para postar isso, porque eu tive que corrigir "i" com "I".
Jasko 27/01

Respostas:

306

SimpleDateFormat não funcionará se ele estiver iniciando com LocalDate, que é novo no Java 8. Pelo que posso ver, você precisará usar o DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ time / format / DateTimeFormatter.html .

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

Isso deve ser impresso em 5 de maio de 1988. Para obter o período após o dia e antes do mês, talvez seja necessário usar "dd'.LLLL yyyy"

ProgrammersBlock
fonte
4
Muito obrigado, isso ajuda, mas não funcionou com 'LLLL' para mostrar o nome do mês, mas com 'MMMM' achei isso estranho, já que mesmo na documentação diz o contrário. Mas mais uma vez obrigado por me ajudar .
Jasko 27/01
2
Agora localDate.format (formatador); não funciona de todo
EngineSense
qual versão do JDK você está usando @ProgrammersBlock
Lova Chittumuri
29

Pode ser curto como:

LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
Zon
fonte
3
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));

A resposta acima mostra isso por hoje

karthik r
fonte
ofPatterns precisa do Android O
Mahdi
0

Com a ajuda dos posts do ProgrammersBlock, eu vim com isso. Minhas necessidades eram um pouco diferentes. Eu precisava pegar uma string e devolvê-la como um objeto LocalDate. Recebi um código que estava usando o Calendar e SimpleDateFormat mais antigos. Eu queria torná-lo um pouco mais atual. Isto é o que eu vim com.

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

}

Espero que isso ajude alguém, se alguém vir uma maneira melhor de executar essa tarefa, adicione sua opinião.

pete
fonte
Eu vejo uma maneira melhor: apenas LocalDate.parse(rawDate)! String.formatestá sendo usado de uma forma totalmente errada aqui, na verdade, apenas retornando a primeira string; o DateTimeFormatternão está sendo usado; parseé um staticmétodo de LocalDate; nãoformattedDate é uma data formatada, nem mesmo uma (conforme solicitado em questão) #String
user85421 21/21/19
0

Existe uma maneira interna de formatar o LocalDate para joda lib

import org.joda.time.LocalDate;

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

Caso você ainda não o tenha, adicione-o ao build.gradle:

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

Feliz codificação! :)

Inoy
fonte
1
Não de acordo com o javadoc.
Edward
@ Edward, se não for, por favor, prove e forneça uma solução que você acha que é melhor.
Inoy
1
você quer que eu prove que LocalDate.toString (String pattern) NÃO existe? Forneça uma referência a esse método, se ele existir - não consegui encontrá-lo em nenhum javadocs. Quanto a uma solução, essa pergunta já tem isso.
20919 Edward Edward
@ Edward, parece que você está tendo dificuldades para encontrá-lo. Atualizei minha resposta.
Inoy
O tempo de Joda não é "incorporado". O OP parece estar usando java.time.LocalDate, não joda.time
Edward
-11

Uma maneira bem legal de fazer isso é usar, SimpleDateFormateu vou te mostrar como:

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

Vejo que você tem a data em uma variável:

sdf.format(variable_name);

Felicidades.

nom
fonte
3
O OP deseja imprimir o conteúdo de uma LocalDateinstância em um formato específico. Como poderia SimpleDateFormatajudá-lo aqui?
Tom