100 votes

Format de date Java - y compris les caractères supplémentaires

Existe-t-il un équivalent du formatage de style php date() en Java ? Je veux dire qu'en php, je peux backslash-escape les caractères pour qu'ils soient traités littéralement. C'est à dire yyyy \y\e\a\r deviendrait Année 2010 . Je n'ai rien trouvé de similaire en Java, tous les exemples ne traitent que des formats de date intégrés.

En particulier, je traite de JCalendar les sélecteurs de date et leurs dateFormatString propriété.

J'en ai besoin parce que dans ma région, il est nécessaire d'écrire toutes sortes de choses supplémentaires dans le format de date, comme d. (pour jour) après la partie jours, m. (pour années) après la partie années et ainsi de suite. Dans le pire des cas, je pourrais utiliser un remplacement de chaîne ou un regexp, mais il existe peut-être un moyen plus simple ? Merci d'avance !

1 votes

Pour tous ceux qui liront ces lignes en 2019 ou plus tard, le SimpleDateFormat utilisée dans quelques réponses est notoirement problématique et périmée depuis longtemps. Évitez-la. Utilisez plutôt la réponse courte par Mark Jeronimus démontrant l'utilisation de java.time, l'API moderne de date et d'heure de Java .

180voto

Thilo Points 108673

Bien sûr, avec le SimpleDateFormat vous pouvez inclure des chaînes littérales :

Dans les chaînes de motifs de date et d'heure, les lettres non citées de 'A' à 'Z' et de 'a' à 'z' sont interprétées comme des lettres de motifs représentant les composants d'une chaîne de date ou d'heure. Le texte peut être cité en utilisant des guillemets simples (') pour éviter toute interprétation. "'''" représente un guillemet simple. Tous les autres caractères ne sont pas interprétés ; ils sont simplement copiés dans la chaîne de sortie lors du formatage ou comparés à la chaîne d'entrée lors de l'analyse syntaxique.

 "hh 'o''clock' a, zzzz"    12 o'clock PM, Pacific Daylight Time

0 votes

Super, c'est exactement ce dont j'ai besoin. Etonnamment, je n'ai pas trouvé une chose aussi simple dans aucun des nombreux exemples que j'ai parcourus sur le web :) Merci beaucoup !

1 votes

Comment échapper au caractère de citation ? J'essaie de faire quelque chose avec le format "mm". En indiquant par exemple 46 minutes comme 46'.

3 votes

@Sotti : 46'' . Le premier pour échapper au second.

30voto

Mark Jeronimus Points 665

Par souci d'exhaustivité, l'option de Java 8 DateTimeFormatter soutient également cette idée :

DateTimeFormatter.ofPattern("yyyy 'year'");

8voto

Ole V.V. Points 24677

Java.time

Mark Jeronimus l'a dit déjà. Je l'étoffe un peu plus. Il suffit de mettre le texte à imprimer littéralement 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 à l'instant :

2010 year
2010 year
2019 year

Si vous utilisez un DateTimeFormatterBuilder et son appendPattern utilisez les guillemets simples de la même manière. Ou bien utilisez son appendLiteral à la place et sans 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 à l'intérieur de guillemets simples ou non :

    DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\"");
    System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));

10 28' 34"

    DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes
            = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH);
    System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles"))
            .format(formatterWithSingleQuoteInsideSingleQuotes));

02 heures du matin, heure avancée du Pacifique.

Tous les formateurs ci-dessus peuvent également être utilisés pour l'analyse syntaxique. Par exemple :

    LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote);
    System.out.println(time);

16:43:56

En SimpleDateFormat utilisée lorsque cette question a été posée il y a près de 10 ans est notoirement problématique et dépassée depuis longtemps. Je vous recommande d'utiliser plutôt java.time, l'API moderne de date et d'heure de Java. C'est pourquoi j'en fais la démonstration.

Liens

6voto

R Samuel Klatchko Points 44549

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

-4voto

Javi Points 5678

Java.text.SimpleDateFormat

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); 
String formattedDate = formatter.format(date);

Vous trouverez plus d'informations ici texte du lien

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