Manejo de fecha Java en formato incorrecto

usuario1572:

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.

Andreas:

Puede usar DateTimeFormatterBuildery 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 staticcampo, 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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Formato de fecha en javascript con formato incorrecto

Formato de fecha en javascript con formato incorrecto

Manejo de MySQL en formato de fecha de 24 horas

PrimeFaces formato de fecha incorrecto

Formato de fecha de columna incorrecto en SQL Server

formato de fecha incorrecto al escribir df en csv pandas

La fecha de JSON se serializa en un formato incorrecto

Odoo 13: Error - formato de fecha incorrecto en Odoo 13

Formato de fecha en Java

Formato de fecha GSON: manejo de la fecha nula en el análisis JSON

Calculadora de tiempo Formato de fecha incorrecto

MVC vinculante con formato de fecha incorrecto

Formato de fecha incorrecto, con tiempo

Mysql formato de fecha incorrecto como texto

Manejo de fecha y hora de MySQL en Java

Convertir formato de fecha en Java

Formato de fecha y hora en Java

Manejo del formato de fecha al leer de Excel en PHP

La llamada Ajax devuelve un formato de fecha incorrecto en el formulario de lista de datos

Campo de fecha con formato incorrecto para completar en un nuevo campo en elasticsearch

formato incorrecto de java xmlencoder

Obtener formato de fecha incorrecto al recuperar datos de SQL en asp.net

Entidad que guarda en la base de datos formato de fecha incorrecto codeigniter 4

Internet Explorer 11 envía la fecha en formato incorrecto al backend de Laravel

Se devolvió `key_as_string` con formato incorrecto en el histograma de fecha

Se devolvió `key_as_string` con formato incorrecto en el histograma de fecha

Formato de fecha y hora incorrecto en hovertool con python bokeh

¿Por qué mi fecha y hora de SQL se almacena en el formato incorrecto?

Formato de fecha incorrecto con toLocaleString en el lado del servidor