Tl;dr
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)
Détails
J'ai une date java.util.Date au format aaaa-mm-jj.
Comme d'autres l'ont mentionné, le Date
n'a pas de format. Elle contient un compte de millisecondes depuis le début de l'année 1970 en UTC. Aucune chaîne n'est attachée.
java.time
Les autres réponses utilisent d'anciennes classes de date et d'heure gênantes, désormais supplantées par les classes java.time.
Si vous avez un java.util.Date
convertir en un Instant
objet. Le site Instant
représente un moment sur la ligne de temps dans UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).
Instant instant = myUtilDate.toInstant();
Fuseau horaire
Les autres réponses ignorent la question cruciale du fuseau horaire. Pour déterminer une date, il faut un fuseau horaire. Pour un instant donné, la date varie sur le globe en fonction du fuseau. Quelques minutes après minuit à Paris, en France, c'est un nouveau jour, alors que c'est encore "hier" à Montréal, au Québec.
Définissez le fuseau horaire selon lequel vous souhaitez que le contexte pour votre Instant
.
ZoneId z = ZoneId.of( "America/Montreal" );
Appliquer le ZoneId
pour obtenir un ZonedDateTime
.
ZonedDateTime zdt = instant.atZone( z );
LocalDate
Si vous ne vous intéressez qu'à la date sans l'heure du jour, extrayez un fichier LocalDate
.
LocalDate localDate = zdt.toLocalDate();
Pour générer une chaîne au format standard ISO 8601, AAAA-MM-JJ, il suffit d'appeler toString
. Les classes java.time utilisent les formats standards par défaut lors de la génération/analyse des chaînes de caractères.
String output = localDate.toString();
2017-01-23
Si vous souhaitez un format MM-DD-YYYY, définissez un modèle de formatage.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );
Notez que les codes des modèles de formatage sont sensibles à la casse. Le code de la question utilise de manière incorrecte mm
(minute de l'heure) plutôt que MM
(mois de l'année).
Utilisez le même DateTimeFormatter
pour l'analyse syntaxique. Les classes java.time sont thread-safe, ce qui vous permet de conserver cet objet et de le réutiliser de manière répétée, même entre plusieurs threads.
LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
À propos de java.time
En java.time est intégré à Java 8 et aux versions ultérieures. Ces classes remplacent les anciennes classes héritage les classes de date et d'heure telles que java.util.Date
, Calendar
, & SimpleDateFormat
.
En Joda-Time Le projet, actuellement en mode de maintenance conseille de migrer vers le java.time classes.
Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez sur Stack Overflow de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir les classes java.time ?
-
Java SE 8 y SE 9 et plus tard
- Intégré.
- Fait partie de l'API Java standard avec une mise en œuvre groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
-
Java SE 6 y SE 7
- Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 & 7 dans Trois Dix-Backport .
-
Android
En Trois-Dix-Extra Le projet étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.time. Vous pouvez y trouver des classes utiles telles que Interval
, YearWeek
, YearQuarter
y plus .