tl; dr
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)
Détails
J'ai un java.util.Date au format aaaa-mm-jj
Comme d'autres l'ont mentionné, la Date
classe n'a pas de format. Il a un compte de millisecondes depuis le début de 1970 en UTC. Sans attaches.
java.time
Les autres réponses utilisent d'anciennes classes de date-heure héritées gênantes, désormais supplantées par les classes java.time.
Si vous avez un java.util.Date
, convertissez-le en Instant
objet. La Instant
classe représente un moment sur la chronologie en 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. La détermination d'une date nécessite un fuseau horaire. Pour un moment donné, la date varie dans le monde entier par zone. Quelques minutes après minuit à Paris, la France est un nouveau jour, alors qu'il est encore «hier» à Montréal Québec.
Définissez le fuseau horaire selon lequel vous voulez un contexte pour votre Instant
.
ZoneId z = ZoneId.of( "America/Montreal" );
Appliquez le ZoneId
pour obtenir un ZonedDateTime
.
ZonedDateTime zdt = instant.atZone( z );
LocalDate
Si vous ne vous souciez que de la date sans heure, extrayez un fichier LocalDate
.
LocalDate localDate = zdt.toLocalDate();
Pour générer une chaîne au format standard ISO 8601, AAAA-MM-JJ, appelez simplement toString
. Les classes java.time utilisent les formats standard par défaut lors de la génération / analyse des chaînes.
String output = localDate.toString();
23/01/2017
Si vous souhaitez un format MM-JJ-AAAA, définissez un modèle de mise en forme.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );
Notez que les codes de modèle de formatage sont sensibles à la casse. Le code de la question est incorrectement utilisé mm
(minute de l'heure) plutôt que MM
(mois de l'année).
Utilisez le même DateTimeFormatter
objet pour l'analyse. Les classes java.time sont thread-safe, vous pouvez donc conserver cet objet et le réutiliser à plusieurs reprises même entre les threads.
LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date
, Calendar
, et SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir les classes java.time?
- Java SE 8 et SE 9 et versions ultérieures
- Intégré.
- Partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
- Java SE 6 et SE 7
- Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
- Android
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval
, YearWeek
, YearQuarter
et plus .