web-dev-qa-db-fra.com

Conversion de format java.util.Date aaaa-mm-jj en mm-jj-aaaa

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

67
user182944

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.

Java 8+

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

Java 7-

Vous devriez utiliser le ThreeTen Backport

Réponse originale

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 DateFormatters

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 Dates. 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;)

134
MadProgrammer
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);
31
newuser

'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
14
darshakat

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 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.

Java.time

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();
_

Fuseau horaire

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 );
_

À propos de Java.time

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 .

3
Basil Bourque

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);
1
Ujitha

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);**
0
Dilip