patterns ejemplo convertir java parsing formatting localdate

ejemplo - string date format java 8



Cómo formatear el objeto LocalDate en MM/dd/aaaa y mantener el formato (4)

Estoy leyendo texto y almacenando las fechas como variables de LocalDate.

¿Hay alguna manera de preservar el formato de DateTimeFormatter para que cuando llame a la variable LocalDate siga teniendo este formato?

EDITAR: Quiero que la fecha de análisis se almacene en el formato correcto del 25/09/2016 en lugar de imprimir como una cadena

Mi código:

public static void main(String[] args) { LocalDate date = LocalDate.now(); DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu"); String text = date.format(formatters); LocalDate parsedDate = LocalDate.parse(text, formatters); System.out.println("date: " + date); // date: 2016-09-25 System.out.println("Text format " + text); // Text format 25/09/2016 System.out.println("parsedDate: " + parsedDate); // parsedDate: 2016-09-25 // I want the LocalDate parsedDate to be stored as 25/09/2016 }


EDITAR: Teniendo en cuenta tu edición, simplemente establece parsemtoFecha igual a tu cadena de texto formateada, así:

parsedDate = text;

Un objeto LocalDate solo se puede imprimir en formato ISO8601 (aaaa-MM-dd). Para imprimir el objeto en otro formato, debe formatearlo y guardar LocalDate como una cadena como la que ha demostrado en su propio ejemplo

DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu"); String text = date.format(formatters);


Respuesta corta: no.

Respuesta larga: Un LocalDate es un objeto que representa un año, mes y día, y esos son los tres campos que contendrá. No tiene un formato, porque las diferentes configuraciones regionales tendrán diferentes formatos, y hará que sea más difícil realizar las operaciones que uno desearía realizar en un LocalDate (como agregar o restar días o agregar tiempos).

La representación de cadena (producida por toString() ) es el estándar internacional sobre cómo imprimir fechas. Si desea un formato diferente, debe usar un DateTimeFormatter de su elección.


Simplemente formatee la fecha mientras la imprime:

public static void main(String[] args) { LocalDate date = LocalDate.now(); DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu"); String text = date.format(formatters); LocalDate parsedDate = LocalDate.parse(text, formatters); System.out.println("date: " + date); System.out.println("Text format " + text); System.out.println("parsedDate: " + parsedDate.format(formatters)); }


Esto podría ser posible si pudiera extender LocalDate y anular el método toString() pero la clase LocalDate es inmutable y, por lo tanto, (secure oop) final. Esto significa que si desea utilizar esta clase, el único método toString() que podrá usar es el anterior (copiado de las fuentes de LocalDate):

@Override public String toString() { int yearValue = year; int monthValue = month; int dayValue = day; int absYear = Math.abs(yearValue); StringBuilder buf = new StringBuilder(10); if (absYear < 1000) { if (yearValue < 0) { buf.append(yearValue - 10000).deleteCharAt(1); } else { buf.append(yearValue + 10000).deleteCharAt(0); } } else { if (yearValue > 9999) { buf.append(''+''); } buf.append(yearValue); } return buf.append(monthValue < 10 ? "-0" : "-") .append(monthValue) .append(dayValue < 10 ? "-0" : "-") .append(dayValue) .toString(); }

Si debe anular este comportamiento, puede colocar LocalDate y usar su método personalizado toString , pero esto podría causar más problemas de los que resuelve.