¿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?

Jasko
fuente
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"

ProgramadoresBlock
fuente
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"));
Zon
fuente
3
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));

La respuesta anterior lo muestra por hoy

karthik r
fuente
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.

pete
fuente
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! :)

Inoy
fuente
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.

nom
fuente
3
OP quiere imprimir el contenido de una LocalDateinstancia en un formato específico. ¿Cómo podría SimpleDateFormatayudarlo aquí?
Tom