Solucione Java.Text.ParseException: error de fecha no analizable en Java

Sheeraz Gul 12 octubre 2023
Solucione Java.Text.ParseException: error de fecha no analizable en Java

Este tutorial demuestra el error java.text.ParseException: fecha no analizable en Java.

Solucione el error java.text.ParseException: fecha no analizable en Java

El error java.text.ParseException: fecha no analizable generalmente ocurre al usar la clase SimpleDateFormat en Java. Esta clase se utiliza para formatear la fecha en Java.

La mayoría de las veces, el error java.text.ParseException: fecha no analizable ocurre cuando intentamos convertir la fecha de la cadena en otro formato de fecha deseado. Hay principalmente tres problemas con la cadena de fecha que causan este error:

Cuando se utiliza el formato de fecha incorrecto

El formato de fecha es muy importante al analizar la fecha en el formato deseado. La fecha distingue entre mayúsculas y minúsculas en Java, por lo que todos los elementos deben estar correctos en mayúsculas y minúsculas.

La siguiente tabla muestra la sintaxis correcta para cada elemento de fecha:

Nombre Sintaxis
Day dd
Month MM
Year yyyy
Hour HH
Minute mm
Second ss

Según la tabla anterior, el formato correcto de fecha en Java será:

SimpleDateFormat DemoDateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");

Cuando se utiliza la localización incorrecta

La localización es otro factor importante al escribir la fecha en Java. Si ponemos la fecha en una configuración regional en inglés e intentamos analizarla en otro sistema que no sea inglés, arrojará el error java.text.ParseException: fecha no analizable.

Necesitamos especificar la configuración regional en el formato de fecha para que no haya problemas al analizar los datos en otros sistemas. Porque si no especificamos, la JVM utilizará la configuración regional predeterminada.

Este es el ejemplo de la sintaxis local:

SimpleDateFormat DemoDateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss", Locale.English);

Cuando se usa la zona horaria incorrecta

Usar la zona horaria correcta también es importante al escribir el formato de fecha en Java. La clase SimpleDateFormat está programada para usar la zona horaria predeterminada, la zona horaria actual de la JVM, si no se especifica en el formato.

La zona horaria de JVM puede cambiar según la ubicación del usuario, por lo que si no configuramos la zona horaria en este caso, habrá un error como un formato incorrecto o un error inesperado.

Aquí está la sintaxis para establecer la zona horaria en Java:

DemoDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

Probemos un ejemplo que arroja el error java.text.ParseException: fecha no analizable en Java:

package delftstack;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Example {
  public static void main(String[] arg) throws ParseException {
    String DemoDate = "Tue Aug 16 12:30:10 IST 2022";
    SimpleDateFormat Simple_Date_Format = new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
    Date Current_Date;
    Current_Date = Simple_Date_Format.parse(DemoDate);
    System.out.println(Current_Date);
  }
}

El patrón de fecha en el código anterior no corresponde a la cadena de entrada, por eso arroja el siguiente error:

Exception in thread "main" java.text.ParseException: Unparseable date: "Tue Aug 16 12:30:10 IST 2022"
    at java.base/java.text.DateFormat.parse(DateFormat.java:399)
    at delftstack.Example.main(Example.java:13)

La solución con el formato de fecha correcto según la cadena dada es:

package delftstack;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Example {
  public static void main(String[] arg) throws ParseException {
    String DemoDate = "Tue Aug 16 12:30:10 IST 2022";
    SimpleDateFormat Simple_Date_Format =
        new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
    Date Current_Date;
    Current_Date = Simple_Date_Format.parse(DemoDate);
    System.out.println(Current_Date);
  }
}

La salida para el código es:

Tue Aug 16 15:30:10 PKT 2022

Si la salida dada no se ve bien, podemos agregar otro SimpleDateFormat y formatear la Current_Date según nuestra elección. Ver ejemplo:

package delftstack;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Example {
  public static void main(String[] arg) throws ParseException {
    String DemoDate = "Tue Aug 16 12:30:10 IST 2022";
    SimpleDateFormat Simple_Date_Format =
        new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
    Date Current_Date;
    Current_Date = Simple_Date_Format.parse(DemoDate);

    SimpleDateFormat Print_Date = new SimpleDateFormat("EE MMM d, yyyy HH:mm:ss");
    System.out.println(Print_Date.format(Current_Date));
  }
}

El código anterior imprime la fecha en un formato más fácil de leer. Ver salida:

Tue Aug 16, 2022 15:30:10
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java Error