¿Cómo formatear LocalDate a cadena?


156

Tengo una variable LocalDate llamada fecha, cuando la imprimo muestra 1988-05-05. Necesito convertir esto para que se imprima como 05.mayo 1988. ¿Cómo hacer esto?


3
Echa un vistazo a la clase DateTimeFormatter . Incluso tiene ejemplos de cómo convertir ay desde Strings.
— azurefrog

2
Debería mostrar un código, lo que ha intentado hasta ahora y lo que no funciona para que la gente pueda ayudarlo.
— bvidal

Traté de hacerlo, pero debido a este molesto "no cumple con nuestros estándares de calidad", finalmente me di por vencido, me tomó 15 minutos publicar esto porque tuve que corregir "i" con "I".
— Jasko

Respuestas:


306

SimpleDateFormat no funcionará si está comenzando con LocalDate, que es nuevo en Java 8. Por lo que puedo ver, tendrá que usar DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ hora / formato / DateTimeFormatter.html .

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

Debería imprimirse el 05 de mayo de 1988. Para obtener el período posterior al día y antes del mes, es posible que deba usar "dd'.LLLL aaaa"


44
Muchas gracias, esto ayuda, pero no funcionó con 'LLLL' para mostrar el nombre del mes, pero con 'MMMM' encontré esto extraño ya que incluso en la documentación dice lo contrario. Pero una vez más, gracias por ayudarme .
— Jasko

2
Ahora localDate.format (formateador); no funciona en absoluto
— EngineSense

qué versión JDK estás usando @ProgrammersBlock
— Lova Chittumuri

29

Podría ser corto como:

LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

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

La respuesta anterior lo muestra por hoy


ofPatterns necesita Android O
— Mahdi

0

Con la ayuda de las publicaciones de ProgrammersBlock se me ocurrió esto. Mis necesidades eran ligeramente diferentes. Necesitaba tomar una cadena y devolverla como un objeto LocalDate. Me entregaron el código que usaba el Calendario anterior y SimpleDateFormat. Quería hacerlo un poco más actual. Esto es lo que se me ocurrió.

    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 esto ayude a alguien, si alguien ve una mejor manera de hacer esta tarea, agregue su opinión.


Veo una mejor manera: LocalDate.parse(rawDate)¡ solo ! String.formatse está utilizando en una forma totalmente incorrecta aquí, en realidad solo devuelve la primera cadena; el DateTimeFormatterno se está utilizando en absoluto; parsees un staticmétodo de LocalDate; formattedDatees no una fecha con formato, ni siquiera un String(a lo solicitado en cuestión)
— user85421

0

Hay una forma integrada de formatear LocalDate para joda lib

import org.joda.time.LocalDate;

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

En caso de que aún no lo tenga, agregue esto a build.gradle:

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

¡Feliz codificación! :)


1
No según el javadoc.
— Edward

@ Edward, si no es así, pruébalo y proporciona una solución que creas que es mejor.
— Inoy

1
¿Quieres que demuestre que LocalDate.toString (patrón de cadena) NO existe? Proporcione una referencia a ese método si existe; no he podido encontrarlo en ningún javadocs. En cuanto a una solución, esta pregunta ya tiene eso.
— Edward

@ Edward, parece que estás teniendo dificultades para encontrarlo. Actualicé mi respuesta.
— Inoy

Joda Time no está "incorporado". OP parece estar usando java.time.LocalDate, no joda.time
— Edward

-11

Una forma bastante agradable de hacer esto es usar SimpleDateFormat. Te mostraré cómo:

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

Veo que tienes la fecha en una variable:

sdf.format(variable_name);

Salud.


3
OP quiere imprimir el contenido de una LocalDateinstancia en un formato específico. ¿Cómo podría SimpleDateFormatayudarlo aquí?
— Tom
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.