Comment convertir une chaîne de date en objet Date ou Calendrier?

J'ai une représentation String d'une date à partir de laquelle je dois créer un objet Date ou Calendar. J'ai regardé les API Date et Calendar mais je n'ai rien trouvé qui puisse faire cela autre que de créer ma propre méthode d'analyse laide. Je sais qu'il doit y avoir un moyen, est-ce que quelqu'un connaît une solution?

62
demandé sur BalusC 2008-09-04 17:54:17

5 réponses

En bref:

DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
  Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
  e.printStackTrace();
}

Voir SimpleDateFormat javadoc pour plus d'.

Et pour le transformer en un Calendar, Faites:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
123
répondu Matt Sheppard 2017-04-04 07:51:54

Tl; dr

LocalDate.parse( "2015-01-02" )

Java.temps

Java 8 et versions ultérieures a un nouveau java.TIME cadre qui rend ces autres réponses obsolètes. Ce cadre est inspiré par Joda-Time, défini par JSR 310, prolongé par la ThreeTen-Extra projet. Voir le tutoriel .

Les anciennes classes groupées, java.util.Date/.Calendrier, sont notoirement gênant et déroutant. Les éviter.

LocalDate

Comme Joda-Time, Java.le temps a une classe LocalDate pour représenter une valeur de date uniquement sans heure du jour et sans fuseau horaire.

ISO 8601

Si votre chaîne d'entrée est dans le format standard ISO 8601 de yyyy-MM-dd, Vous pouvez demander à cette classe d'analyser directement la chaîne sans avoir besoin de spécifier un formateur.

Les formats ISO 8601 sont utilisés par défaut en java.temps, à la fois pour analyser et générer des représentations de chaîne de date-heure valeur.

LocalDate localDate = LocalDate.parse( "2015-01-02" );

Formateur

Si vous avez un format différent, spécifiez un formateur à partir de java.temps.format paquet. Vous pouvez spécifier votre propre modèle de formatage ou laisser java.le temps se localise automatiquement en fonction d'un Locale spécifiant une langue humaine pour la traduction et des normes culturelles pour décider des questions telles que la période par rapport à la virgule.

Modèle de mise en forme

Lire l'DateTimeFormatter classe doc pour plus de détails sur les codes utilisés dans le modèle de format. Ils varient un peu des anciens modèles de classe java.text.SimpleDateFormat obsolètes.

Notez que le deuxième argument de la méthode parse est une référence de méthode , syntaxe ajoutée à Java 8 et versions ultérieures.

String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );

Vidage sur console.

System.out.println ( "localDate: " + localDate );

LocalDate: 2015-01-02

Localiser automatiquement

Ou plutôt que de spécifier un modèle de formatage, laissez java.le temps de localiser pour vous. Appelez DateTimeFormatter.ofLocalizedDate, et assurez-vous de spécifier le {[9 souhaité/attendu]} plutôt que de compter sur la valeur par défaut actuelle de la JVM qui peut changer à tout moment pendant l'exécution(!).

String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );

Vidage sur console.

System.out.println ( "input: " + input + " | localDate: " + localDate );

Entrée: janvier 2, 2015 / localDate: 2015-01-02

14
répondu Basil Bourque 2016-08-10 04:53:41

Le hautement considéré bibliothèque de temps Joda vaut également le coup d'oeil. C'est la base de la nouvelle api Date et heure qui est crayonnée pour Java 7. Le design est soigné, intuitif, bien documenté et évite beaucoup de la maladresse de l'original java.util.Date / java.util.Calendar des classes.

Joda de l'DateFormatter peut analyser une Chaîne à une Joda DateTime.

9
répondu serg10 2008-09-04 16:09:50

Essayez ceci:

DateFormat.parse(String)
0
répondu Apocalisp 2014-12-14 22:57:19

La classe DateFormat a une méthode parse.

Voir http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html pour plus d'informations.

0
répondu Alexander Stolz 2014-12-14 22:58:08