Company logo
  • Empleos
  • Bootcamp
  • Acerca de nosotros
  • Para profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
    • Bootcamp
  • Para empresas
    • Inicio
    • Nuestro proceso
    • Planes
    • Pruebas
    • Nómina
    • Blog
    • Calculadora

0

265
Vistas
Parsing LocalDate but getting DateTimeParseException; dd-MMM-uuuu

I am trying to convert a String to LocalDate using DateTimeFormatter, but I receive an exception:

java.time.format.DateTimeParseException: Text '2021-10-31' could not be parsed at index 5

My code is

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-uuuu");
String text = "2021-10-31";
LocalDate date = LocalDate.parse(text, formatter);

I am trying to convert from input date 2021-10-31 to 31-Oct-2021.

9 months ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Whats wrong?

What Am I doing wrong in my code.

Your code specifies the pattern dd-MMM-uuuu, but you attempt to parse the text 2021-10-31 which does not fit this pattern at all.

The correct pattern for your string would be yyyy-MM-dd. See the documentation of the formatter for details.

In particular, watch the order of the days and months dd-MMM vs MM-dd. And the amount of months MMM. A string matching your current pattern would be 31-Oct-2021.


Change pattern

From the comments:

my input date is - 2021-10-31 need to covert into - 31-Oct-2021

You can easily change the pattern of the date by:

  1. Parsing the input date using the pattern yyyy-MM-dd
  2. and then format it back to string using the pattern dd-MMM-yyyy.

In code, that is:

DateTimeFormatter inputPattern = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter outputPattern = DateTimeFormatter.ofPattern("dd-MMM-yyyy");

String input = "2021-10-31";
LocalDate date = LocalDate.parse(text, inputPattern);

String output = date.format(outputPattern);
9 months ago · Santiago Trujillo Denunciar

0

You do not need to use a DateTimeFormatter to parse your input string

The modern Date-Time API is based on ISO 8601 and does not require using a DateTimeFormatter object explicitly as long as the Date-Time string conforms to the ISO 8601 standards. Note that your date string is already in ISO 8601 format.

You need a DateTimeFormatter just to format the LocalDate obtained by parsing the input string.

Demo:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        LocalDate date = LocalDate.parse("2021-10-31");
        System.out.println(date);

        DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("dd-MMM-uuuu", Locale.ENGLISH);
        System.out.println(date.format(dtfOutput));
    }
}

Output:

2021-10-31
31-Oct-2021

ONLINE DEMO

Make sure to use Locale when using a DateTimeFormatter. Check Never use SimpleDateFormat or DateTimeFormatter without a Locale to learn more about it.

Learn more about the modern Date-Time API* from Trail: Date Time.


* If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring. Note that Android 8.0 Oreo already provides support for java.time. Check this answer and this answer to learn how to use java.time API with JDBC.

9 months ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar empleo Planes Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2023 PeakU Inc. All Rights Reserved.