99 votes

java.util.Conversion du format de date yyyy-mm-dd en mm-dd-yyyy

J'ai un java.util.Date dans le format yyyy-mm-dd . Je veux qu'il soit au format mm-dd-yyyy

Voici l'exemple d'util 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);

Pourtant, la sortie que j'obtiens n'est pas dans le format mm-dd-yyyy .

Veuillez m'indiquer comment mettre en forme un formulaire d'inscription. java.util.Date de yyyy-mm-dd a mm-dd-yyyy

168voto

MadProgrammer Points 161522

Date est un conteneur pour le nombre de millisecondes depuis l'époque Unix ( 00:00:00 UTC le 1er janvier 1970).

Il n'a aucune notion 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);

Sorties...

05-11-2018
2018-05-11
2018-05-11T17:24:42.980

Java 7.

Vous devriez utiliser le Sac à dos ThreeTen

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

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 changé le fond Date valeur. C'est l'objet de la DateFormatter s

Mise à jour avec un exemple supplémentaire

Juste au cas où le premier exemple n'aurait pas eu de sens...

Cet exemple utilise deux formateurs pour formater la même date. J'utilise ensuite ces mêmes formateurs pour analyser le fichier String à des valeurs Date s. L'analyse syntaxique qui en résulte ne modifie pas la façon dont Date rapporte sa valeur.

Date#toString est juste un vidage de son contenu. Vous ne pouvez pas changer cela, mais vous pouvez formater le fichier Date objet comme vous le souhaitez

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. Regardez de plus près SimpleDateFormat pour être sûr que vous n'utilisez pas les mauvais modèles ;)

34voto

newuser Points 3563
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);

15voto

darshakat Points 599

Le 'M' (Capital) représente le mois et le 'm' (Simple) représente les minutes.

Quelques exemples pour les 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 pour les 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

4voto

Basil Bourque Points 8938

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 .

3voto

Dilip D Points 528

S'il vous plaît changer le petit "mm" mois en majuscule "MM" il 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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X