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 ?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top