Comment convertir une chaîne de date en objet Date ou Calendrier ?
Question
j'ai un String
représentation d'une date dont j'ai besoin pour créer un Date
ou Calendar
objet de.J'ai parcouru Date
et Calendar
API, mais je n'ai rien trouvé qui puisse faire cela à part créer ma propre méthode d'analyse laide.Je sais qu'il doit y avoir un moyen, quelqu'un connaît-il une solution ?
La solution
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.
Et pour en faire un Calendar
, faire:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Autres conseils
tl;dr
LocalDate.parse( "2015-01-02" )
java.time
Java 8 et versions ultérieures ont un nouveau java.time cadre qui rend ces autres réponses dépassées.Ce cadre s'inspire de Joda-Time, Défini par JSR310, et prolongé par le TroisDix-Extra projet.Voir le Didacticiel.
Les anciennes classes groupées, java.util.Date/.Calendar, sont notoirement gênantes et déroutantes.Évite-les.
LocalDate
Comme Joda-Time, java.time a une classe LocalDate
pour représenter une valeur de date uniquement sans heure et sans fuseau horaire.
OIN 8601
Si votre chaîne d'entrée est dans la norme OIN 8601 format 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 dans java.time, à la fois pour analyser et générer des représentations sous forme de chaîne de valeurs date-heure.
LocalDate localDate = LocalDate.parse( "2015-01-02" );
Formateur
Si vous disposez d'un format différent, spécifiez un formateur à partir du java.time.format emballer.Vous pouvez soit spécifier votre propre modèle de formatage, soit laisser Java.time se localiser automatiquement selon les besoins. Locale
spécifier une langue humaine pour la traduction et des normes culturelles pour décider de questions telles que le point par rapport à la virgule.
Modèle de formatage
Lis le DateTimeFormatter
class doc pour plus de détails sur les codes utilisés dans le modèle de format.Ils diffèrent un peu des anciens démodés java.text.SimpleDateFormat
modèles de classe.
Notez comment le deuxième argument du parse
la méthode est une référence de la 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 );
Vider sur la console.
System.out.println ( "localDate: " + localDate );
Date locale :2015-01-02
Localiser automatiquement
Ou plutôt que de spécifier un modèle de formatage, laissez java.time localiser pour vous.Appel DateTimeFormatter.ofLocalizedDate
, et assurez-vous de préciser les valeurs souhaitées/attendues. Locale
plutôt que de compter sur les valeurs par défaut actuelles de la JVM qui peuvent 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 );
Vider sur la console.
System.out.println ( "input: " + input + " | localDate: " + localDate );
saisir:2 janvier 2015 | localDate:2015-01-02
Le très apprécié Bibliothèque Joda Time vaut également le détour.C'est la base du nouveau API de date et d'heure qui est prévu pour Java 7.Le design est soigné, intuitif, bien documenté et évite beaucoup de maladresses de l'original java.util.Date
/ java.util.Calendar
Des classes.
Chez Joda DateFormatter
peut analyser une chaîne en Joda DateTime
.
Essaye ça:
DateFormat.parse(String)
Le DateFormat
la classe a un parse
méthode.
Voir http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html pour plus d'informations.