web-dev-qa-db-fra.com

Analyse de chaîne en date avec un format différent en Java

Je veux convertir String en Date dans différents formats.

Par exemple, 

Je reçois de l'utilisateur,

String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format

Je veux convertir cette fromDate en tant qu'objet Date au format "yyyy-MM-dd"

Comment puis-je faire ceci?

80
Gnaniyar Zubair

Jetez un oeil à SimpleDateFormat . Le code ressemble à ceci:

SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

try {

    String reformattedStr = myFormat.format(fromUser.parse(inputString));
} catch (ParseException e) {
    e.printStackTrace();
}
166
Michael Myers

Utilisez la SimpleDateFormat class:

private Date parseDate(String date, String format) throws ParseException
{
    SimpleDateFormat formatter = new SimpleDateFormat(format);
    return formatter.parse(date);
}

Usage:

Date date = parseDate("19/05/2009", "dd/MM/yyyy");

Pour plus d'efficacité, vous souhaitez stocker vos formateurs dans une table de hachage. Le hashmap est un membre statique de votre classe util.

private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>();

public static Date parseDate(String date, String format) throws ParseException
{
    SimpleDateFormat formatter = hashFormatters.get(format);

    if (formatter == null)
    {
        formatter = new SimpleDateFormat(format);
        hashFormatters.put(format, formatter);
    }

    return formatter.parse(date);
}
12
Agora

tl; dr

LocalDate.parse( 
    "19/05/2009" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
)

Détails

Les autres réponses avec Java.util.Date, Java.sql.Date et SimpleDateFormat sont maintenant obsolètes.

LocalDate

La manière moderne de faire date-heure consiste à travailler avec les classes Java.time, en particulier LocalDate. La classe LocalDate représente une valeur de date uniquement sans heure et sans fuseau horaire.

DateTimeFormatter

Pour analyser ou générer une chaîne représentant une valeur date-heure, utilisez la classe DateTimeFormatter .

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );

Ne confondez pas un objet date-heure avec une chaîne représentant sa valeur. Un objet date-heure a no format, contrairement à une chaîne. Un objet date-heure, tel que LocalDate, peut générer une chaîne pour représenter sa valeur interne, mais l'objet date-heure et la chaîne sont des objets distincts.

Vous pouvez spécifier n'importe quel format personnalisé pour générer une chaîne. Ou laissez Java.time faire le travail de localisation automatique.

DateTimeFormatter f = 
    DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
                     .withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );

Dump à la console.

System.out.println( "ld: " + ld + " | output: " + output );

ld: 2009-05-19 | sortie: mardi 19 mai 2009

_ { Voir en action sur IdeOne.com .


À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date , Calendar _, & SimpleDateFormat .

Le projet Joda-Time , désormais en mode { mode maintenance }, conseille la migration vers les classes Java.time .

Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.* classes.

Où obtenir les classes Java.time? 

  • Java SE 8 , Java SE 9 et versions ultérieures
    • Intégré. 
    • Une partie de l'API Java standard avec une implémentation fournie.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité Java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Les versions ultérieures d'Android regroupent des implémentations des classes Java.time.
    • Pour les anciens Android (<26), le projet ThreeTenABP s’adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time. Vous pouvez y trouver des classes utiles telles que Interval _, YearWeek , YearQuarter _ et plus _.

8
Basil Bourque

Convertir une date de chaîne en Java.sql.Date

String fromDate = "19/05/2009";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Java.util.Date dtt = df.parse(fromDate);
Java.sql.Date ds = new Java.sql.Date(dtt.getTime());
System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
7
Ritesh Kaushik

Vérifiez les javadocs pour Java.text.SimpleDateFormat Il décrit tout ce dont vous avez besoin.

6
Matt

Bien que SimpleDateFormat fonctionne réellement pour vos besoins, vous pouvez également consulter Joda Time , qui constitue apparemment la base de la bibliothèque Date refondue dans Java 7. Bien que je ne l'aie pas beaucoup utilisée Je n’ai entendu que de bonnes choses à ce sujet et, si vous avez beaucoup manipulé les dates dans vos projets, il vaudrait probablement la peine de les examiner.

3
James McMahon

Un moyen simple de formater une date et de la convertir en chaîne

    Date date= new Date();

    String dateStr=String.format("%td/%tm/%tY", date,date,date);

    System.out.println("Date with format of dd/mm/dd: "+dateStr);

sortie: date au format jj/mm/jj: 21/10/2015

1
Khalid Habib

Un objet Date n'a pas de format , c'est une représentation. La date peut être présentée par une String avec le format que vous aimez

Par exemple. "yyyy-MM-dd", "yy-MMM-dd", "dd-MMM-yy", etc.

Pour ce faire, vous pouvez utiliser SimpleDateFormat

Essaye ça,

        String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format

        SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); 
        SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type
            String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer
            System.out.println(dateMyFormat); // outputs : 2009-05-19

        } catch (ParseException e) {
            e.printStackTrace();
        }

Cette sortie: 2009-05-19

0
Dulith De Costa