J'ai un Java.util.Date
au format yyyy-mm-dd
. Je veux qu'il soit au format mm-dd-yyyy
Vous trouverez ci-dessous l'exemple d'utilisation que j'ai essayé pour cette conversion:
// Setting the pattern
SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy");
// myDate is the Java.util.Date in yyyy-mm-dd format
// Converting it into String using formatter
String strDate = sm.format(myDate);
//Converting the String back to Java.util.Date
Date dt = sm.parse(strDate);
Néanmoins, le résultat obtenu n’est pas au format mm-dd-yyyy
.
Faites-moi savoir comment formater un Java.util.Date
de yyyy-mm-dd
à mm-dd-yyyy
Date
est un conteneur du nombre de millisecondes écoulées depuis l’époque Unix (00:00:00 UTC le 1er janvier 1970).
Il n'a pas de concept de format.
LocalDateTime ldt = LocalDateTime.now();
System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt));
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt));
System.out.println(ldt);
Les sorties...
05-11-2018
2018-05-11
2018-05-11T17:24:42.980
Vous devriez utiliser le ThreeTen Backport
Par exemple...
Date myDate = new Date();
System.out.println(myDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate));
System.out.println(myDate);
Les sorties...
Wed Aug 28 16:20:39 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 16:20:39 EST 2013
Aucune mise en forme n'a modifié la valeur Date
sous-jacente. C’est le but de la DateFormatter
s
Mis à jour avec un exemple supplémentaire
Juste au cas où le premier exemple n'aurait pas de sens ...
Cet exemple utilise deux formateurs pour formater la même date. J'utilise ensuite ces mêmes formateurs pour analyser les valeurs String
dans Date
s. L'analyse qui en résulte ne modifie pas la manière dont Date
rapporte sa valeur.
Date#toString
n'est qu'un fichier de son contenu. Vous ne pouvez pas changer cela, mais vous pouvez formater l'objet Date
comme bon vous semble
try {
Date myDate = new Date();
System.out.println(myDate);
SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy");
SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd");
// Format the date to Strings
String mdy = mdyFormat.format(myDate);
String dmy = dmyFormat.format(myDate);
// Results...
System.out.println(mdy);
System.out.println(dmy);
// Parse the Strings back to dates
// Note, the formats don't "stick" with the Date value
System.out.println(mdyFormat.parse(mdy));
System.out.println(dmyFormat.parse(dmy));
} catch (ParseException exp) {
exp.printStackTrace();
}
Quelles sorties ...
Wed Aug 28 16:24:54 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 00:00:00 EST 2013
Wed Aug 28 00:00:00 EST 2013
Faites également attention aux modèles de format. Examinez de plus près SimpleDateFormat
pour vous assurer que vous n'utilisez pas les mauvais schémas;)
SimpleDateFormat("MM-dd-yyyy");
au lieu de
SimpleDateFormat("mm-dd-yyyy");
parce que MM points Month
, mm points minutes
SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);
'M' (Capital) représente le mois et 'm' (Simple) représente les minutes
Quelques exemples pendant des mois
'M' -> 7 (without prefix 0 if it is single digit)
'M' -> 12
'MM' -> 07 (with prefix 0 if it is single digit)
'MM' -> 12
'MMM' -> Jul (display with 3 character)
'MMMM' -> December (display with full name)
Quelques exemples de minutes
'm' -> 3 (without prefix 0 if it is single digit)
'm' -> 19
'mm' -> 03 (with prefix 0 if it is single digit)
'mm' -> 19
_LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)
_
J'ai un Java.util.Date au format aaaa-mm-jj
Comme mentionné précédemment, la classe Date
n'a pas de format. Il compte des millisecondes depuis le début de 1970 en UTC. Sans attaches.
Les autres réponses utilisent d'anciennes classes de date et d'heure problématiques, désormais remplacées par les classes Java.time.
Si vous avez un _Java.util.Date
_, convertissez-le en objet Instant
. La classe Instant
représente un moment sur la timeline en UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une décimale fraction).
_Instant instant = myUtilDate.toInstant();
_
Les autres réponses ignorent la question cruciale du fuseau horaire. Déterminer 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’elle était encore "hier" à Montréal, au 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 du jour, extrayez un LocalDate
.
_LocalDate localDate = zdt.toLocalDate();
_
Pour générer une chaîne au format ISO 8601 standard, AAAA-MM-JJ, appelez simplement toString
. Les classes Java.time utilisent les formats standard par défaut lors de la génération/analyse de chaînes.
_String output = localDate.toString();
_
2017-01-23
Si vous souhaitez un format MM-JJ-AAAA, définissez un modèle de formatage.
_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 a été incorrectement utilisé mm
(minute d’heure) au lieu de MM
(mois de l’année).
Utilisez le même objet DateTimeFormatter
pour l'analyse. Les classes Java.time sont thread-safe, vous pouvez donc conserver cet objet et le réutiliser de manière répétée, même pour des threads.
_LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
_
Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes legacy date-heure telles que Java.util.Date
, Calendar
, & SimpleDateFormat
=.
Le projet Joda-Time , actuellement en mode maintenance , conseille de migrer vers les classes Java.time .
Pour en savoir plus, voir le Tutoriel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 31 .
Où obtenir les classes Java.time?
Le projet ThreeTen-Extra == étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time. Vous pouvez trouver ici quelques classes utiles telles que Interval
, YearWeek
, YearQuarter
, et plus .
C'est simple utiliser ci-dessous les codes.
final Date todayDate = new Date();
System.out.println(todayDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(todayDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(todayDate));
System.out.println(todayDate);
S'il vous plaît changer petit "mm" mois en capital "MM" cela fonctionnera.pour référence ci-dessous est l'exemple de code.
**Date myDate = new Date();
SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);
Date dt = sm.parse(strDate);
System.out.println(strDate);**