En primer lugar, soy un desarrollador de C # que aprende Java. Estoy convirtiendo un programa que escribí en C # como ejercicio y tengo problemas para analizar una fecha que se envía desde un formulario html. El formulario se envía como un correo electrónico y el programa Java lee los correos electrónicos y analiza el cuerpo. Tengo un calendario desplegable para que mis amigos seleccionen una fecha, pero siempre hay algún imbécil que tiene que escribirlo y desordenar todo. Actualmente estoy haciendo esto en mi código:
public void SetDatePlayed(String datePlayed)
{
this.datePlayed = LocalDate.parse(datePlayed);
}
datePlayed se pasa en una cadena generalmente formateada como aaaa-MM-dd pero, por supuesto, alguien escribió 3/7 en lugar de usar el calendario desplegable en el formulario. this.datePlayed es un LocalDate. En C #, terminaría con una fecha que supuso 2020 para el año, no hay problema. LocalDate realmente lo quiere en el formato aaaa-MM-dd y no sé cuál es la mejor práctica aquí con Java. Lo he buscado en Google toda la mañana y no he encontrado esto como un problema para nadie más. No me importa si estoy usando LocalDate, pero necesito que sea un tipo de datos de fecha para poder hacer verificaciones de fechas, clasificaciones, búsquedas, etc. más adelante.
Puede usar DateTimeFormatterBuilder
y parseDefaulting()
para proporcionar el valor predeterminado para el año.
Sobre la base de la respuesta de Sweeper , se puede hacer así:
static LocalDate parseLoosely(String text) {
DateTimeFormatter fmt = new DateTimeFormatterBuilder()
.appendPattern("[uuuu-M-d][M/d/uuuu][M/d]")
.parseDefaulting(ChronoField.YEAR, Year.now().getValue())
.toFormatter();
return LocalDate.parse(text, fmt);
}
Advertencia: no guarde en caché el formateador, por ejemplo, en un static
campo, ya que toma instantáneas del año, si el programa se puede ejecutar en Nochevieja, lo que haría una aplicación web, a menos que agregue lógica para que la memoria caché se actualice automáticamente al cambiar el año.
Prueba
System.out.println(parseLoosely("2019-04-07"));
System.out.println(parseLoosely("2019-4-7"));
System.out.println(parseLoosely("4/7/2019"));
System.out.println(parseLoosely("4/7"));
Salida
2019-04-07
2019-04-07
2019-04-07
2020-04-07
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras