java.time
La réponse de MadProgrammer est correcte, en particulier l'astuce sur Joda-Time . Le successeur de Joda-Time est désormais intégré à Java 8 en tant que nouveau package java.time . Voici un exemple de code en Java 8.
Lorsque vous travaillez avec la date-heure (par opposition à la date locale), le fuseau horaire est critique. Le jour du mois dépend du fuseau horaire. Par exemple, le fuseau horaire de l' Inde est +05:30
(cinq heures et demie d'avance sur UTC), tandis que la France n'a qu'une heure d'avance. Ainsi, un moment dans un nouveau jour en Inde a une date alors que le même moment en France a la date «d'hier». La création d'une sortie de chaîne sans informations de fuseau horaire ou de décalage crée une ambiguïté. Vous avez demandé une sortie AAAA-MM-JJ donc je l'ai fournie, mais je ne la recommande pas. Au lieu de ISO_LOCAL_DATE
j'aurais utilisé ISO_DATE
pour obtenir cette sortie:2014-02-25+05:30
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );
DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );
Dump sur console…
System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );
Lors de l'exécution ...
zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25
Joda-Time
Code similaire utilisant la bibliothèque Joda-Time , le précurseur de java.time.
DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );
ISO 8601
Soit dit en passant, ce format de votre chaîne d'entrée est un format standard, l'un des nombreux formats de chaîne date-heure pratiques définis par ISO 8601 .
Joda-Time et java.time utilisent par défaut les formats ISO 8601 lors de l'analyse et de la génération de représentations sous forme de chaîne de diverses valeurs de date-heure.
Date
àyyyy-MM-dd
ou d'analyser une chaîne deyyyy-MM-dd
à uneDate
valeur ?? Pour formater la date, utilisez simplementformat1.format(date)
, pour l'analyser, utilisezformat1.parse(someStringValueInTheCorrectFormat)