Existe-t-il un équivalent au formatage de style php date () en Java? Je veux dire, en php, je peux échapper aux barres obliques inverses pour les traiter littéralement. Ie yyyy \ y \ e \ a \ r deviendrait 2010 année . Je n'ai rien trouvé de similaire en Java, tous les exemples ne concernent que les formats de date intégrés.
En particulier, je m'occupe des sélecteurs de dates JCalendar et de leur propriété dateFormatString .
J'en ai besoin parce que dans mes paramètres régionaux, il est nécessaire d'écrire toutes sortes de choses supplémentaires au format de date, comme d. (pour jour) après la partie des jours, m. (pendant des années) après des années et ainsi de suite. Dans le pire des cas, je pourrais utiliser un remplacement de chaîne ou une expression régulière, mais il existe peut-être un moyen plus simple? Merci d'avance!
la source
SimpleDateFormat
classe utilisée dans quelques réponses est notoirement gênante et dépassée depuis longtemps. L'éviter. Utilisez plutôt la réponse courte de Mark Jeronimus démontrant l'utilisation de java.time, l'API Java de date et d'heure moderne .Réponses:
Bien sûr, avec SimpleDateFormat, vous pouvez inclure des chaînes littérales:
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
la source
46''
. Le premier à échapper au second.java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont maintenant héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures.Juste pour être complet, Java 8
DateTimeFormatter
prend également en charge ceci:DateTimeFormatter.ofPattern("yyyy 'year'");
la source
Vous pouvez utiliser String.format comme documenté dans java.util.Formatter :
Calendar c = ...; String s = String.format("%tY year", c); // -> s == "2010 year" or whatever the year actually is
la source
java.time
Mark Jeronimus l'a déjà dit. Je l'étoffe un peu plus. Mettez simplement le texte à imprimer entre guillemets simples.
DateTimeFormatter yearFormatter = DateTimeFormatter.ofPattern("yyyy 'year'"); System.out.println(LocalDate.of(2010, Month.FEBRUARY, 3).format(yearFormatter)); System.out.println(Year.of(2010).format(yearFormatter)); System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Vilnius")).format(yearFormatter));
Sortie lors de l'exécution juste maintenant:
Si vous utilisez a
DateTimeFormatterBuilder
et saappendPattern
méthode, utilisez les guillemets simples de la même manière. Ou utilisezappendLiteral
plutôt sa méthode et pas de guillemets simples.Comment mettre un guillemet simple dans le format, alors? Deux guillemets simples en produisent un. Peu importe que le guillemet simple double soit entre guillemets simples ou non:
DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\""); System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));
DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH); System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles")) .format(formatterWithSingleQuoteInsideSingleQuotes));
Tous les formateurs ci-dessus peuvent également être utilisés pour l'analyse. Par exemple:
LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote); System.out.println(time);
La
SimpleDateFormat
classe utilisée lorsque cette question a été posée il y a près de 10 ans est notoirement gênante et dépassée depuis longtemps. Je vous recommande d'utiliser à la place java.time, l'API de date et d'heure Java moderne. C'est pourquoi je démontre exactement cela.Liens
DateTimeFormatter
la source
java.text.SimpleDateFormat
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String formattedDate = formatter.format(date);
Vous obtiendrez plus d'informations ici lien texte
la source