String sDate = "06.08.2020" // 06 day 08 month 2020 is year

C'est la date que j'ai dans mon fichier txt. Je les utilise dans JTable. Pour trier le tableau, je les convertis à ce jour avec ce DateFormatter.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");

Et il convertit la chaîne en date comme ceci.

LocalDate date = LocalDate.parse(sDate,formatter);
//The date : Thu Aug 06 00:00:00 TRT 2020

Maintenant, je dois le convertir comme le premier rendez-vous 06.08.2020. Mais je ne peux pas utiliser la date comme entrée. Parce que je l'obtiens de JTable donc je l'obtiens en tant que String .

J'ai donc essayé ce code.

String sDate1 = "Thu Aug 06 00:00:00 TRT 2020";// The date i get from JTable
LocalDate lastdate = LocalDate.parse(sDate1,formatter);
sDate1 = formatter.format(lastdate);

Mais j'obtiens une erreur comme ceci Text 'Thu Aug 06 00:00:00 TRT 2020' could not be parsed at index 0.

Donc ce cône ne fonctionne pas bien: LocalDate lastdate = LocalDate.parse(sDate1,formatter); Je ne vois pas où est le problème.

1
Gresta 31 août 2020 à 19:10

2 réponses

Meilleure réponse

Où votre code a échoué:

SimpleDateFormat sdf1=new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
String dateStr = "06.08.2020";
sdf1.parse(dateStr);

Comme vous pouvez le voir, le modèle de la SimpleDateFormat et celui de la chaîne date ne correspondent pas et par conséquent, ce code lancera ParseException.

Comment le faire fonctionner?

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String dateStr = "06.08.2020";
Date date = sdf.parse(dateStr);

Vous devez avoir déjà compris pourquoi cela fonctionnait. Cela a fonctionné parce que le modèle de la SimpleDateFormat correspond à celui de la chaîne dateStr.

Puis-je formater l'objet Date (c'est-à-dire date) dans la chaîne d'origine?

Oui, utilisez simplement le même format que vous avez utilisé pour analyser la chaîne d'origine comme indiqué ci-dessous:

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String dateStr = "06.08.2020";
Date date = sdf.parse(dateStr);

// Display in the default format
System.out.println(date);

// Format into the string
dateStr = sdf.format(date);
System.out.println(dateStr);

Un conseil:

Je vous recommande de passer de l'API java.util date-heure et SimpleDateFormat obsolète et sujette aux erreurs à modern java.time API date-heure et API de mise en forme correspondante (package, java.time.format). Pour en savoir plus sur l'API date-heure moderne, consultez Trail: Date Time < / a> .

Utilisation de l'API date-heure moderne:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
String dateStr = "06.08.2020";
LocalDate date = LocalDate.parse(dateStr, formatter);

// Display in the default format
System.out.println(date);

// Format into the string
dateStr = formatter.format(date);
System.out.println(dateStr);

Je ne vois aucune différence en utilisant l'ancienne API et l'API moderne:

C'est vrai pour cet exemple simple, mais lorsque vous devrez effectuer des opérations complexes en utilisant la date et l'heure, vous trouverez l'API date-heure moderne intelligente et propre, tandis que l'ancienne API complexe et sujette aux erreurs.

Démo:

import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Given date-time string
        String strDate = "Thu Aug 06 00:00:00 TRT 2020";

        // Replace TRT with standard time-zone string
        strDate = strDate.replace("TRT", "Europe/Istanbul");

        // Define formatter
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzzz yyyy");

        // Parse the date-time string into ZonedDateTime
        ZonedDateTime zdt = ZonedDateTime.parse(strDate, formatter);
        System.out.println(zdt);

        // If you wish, convert ZonedDateTime into LocalDateTime
        LocalDateTime ldt = zdt.toLocalDateTime();
        System.out.println(ldt);
    }
}

Sortie:

2020-08-06T00:00+03:00[Europe/Istanbul]
2020-08-06T00:00
2
Arvind Kumar Avinash 1 sept. 2020 à 09:31