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?
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);
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
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
.
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.