Comment formater LocalDate en chaîne?

158

J'ai une variable LocalDate appelée date, quand je l'imprime, elle affiche 1988-05-05 Je dois la convertir pour qu'elle soit imprimée comme 05.May 1988.Comment faire cela?

Jasko
la source
3
Jetez un œil à la classe DateTimeFormatter . Il contient même des exemples de conversion vers et depuis l' Stringart.
azurefrog
2
Vous devriez montrer du code, ce que vous avez essayé jusqu'à présent et ce qui ne fonctionne pas pour que les gens puissent vous aider.
bvidal le
J'ai essayé de faire ça mais à cause de ce truc ennuyeux "ça ne répond pas à nos normes de qualité" j'ai finalement abandonné, il m'a fallu 15 minutes pour poster ça parce que je devais corriger "i" avec "je".
Jasko

Réponses:

307

SimpleDateFormat ne fonctionnera pas s'il démarre avec LocalDate qui est nouveau dans Java 8. D'après ce que je peux voir, vous devrez utiliser DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/ heure / format / DateTimeFormatter.html .

LocalDate localDate = LocalDate.now();//For reference
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLLL yyyy");
String formattedString = localDate.format(formatter);

Cela devrait imprimer le 5 mai 1988. Pour obtenir la période après le jour et avant le mois, vous devrez peut-être utiliser "jj'.LLLL aaaa"

ProgrammeursBlock
la source
4
Merci beaucoup, cela aide, mais cela n'a pas fonctionné avec `` LLLL '' pour afficher le nom du mois, mais avec `` MMMM '' j'ai trouvé cela étrange car même dans la documentation, il est dit le contraire.Mais encore une fois merci de m'avoir aidé .
Jasko
2
Maintenant localDate.format (formateur); ne fonctionne pas du tout
EngineSense
quelle version JDK votre utilisation @ProgrammersBlock
Lova Chittumuri
30

Pourrait être court comme:

LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
Zon
la source
3
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));

La réponse ci-dessus le montre pour aujourd'hui

karthik r
la source
ofPatterns a besoin d'android O
Mahdi
0

Avec l'aide des messages de ProgrammersBlock, j'ai trouvé ceci. Mes besoins étaient légèrement différents. J'avais besoin de prendre une chaîne et de la renvoyer en tant qu'objet LocalDate. J'ai reçu du code qui utilisait l'ancien Calendar et SimpleDateFormat. Je voulais le rendre un peu plus actuel. C'est ce que j'ai proposé.

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;


    void ExampleFormatDate() {

    LocalDate formattedDate = null;  //Declare LocalDate variable to receive the formatted date.
    DateTimeFormatter dateTimeFormatter;  //Declare date formatter
    String rawDate = "2000-01-01";  //Test string that holds a date to format and parse.

    dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE;

    //formattedDate.parse(String string) wraps the String.format(String string, DateTimeFormatter format) method.
    //First, the rawDate string is formatted according to DateTimeFormatter.  Second, that formatted string is parsed into
    //the LocalDate formattedDate object.
    formattedDate = formattedDate.parse(String.format(rawDate, dateTimeFormatter));

}

J'espère que cela aidera quelqu'un, si quelqu'un voit une meilleure façon de faire cette tâche, veuillez ajouter votre contribution.

Pete
la source
Je vois une meilleure façon: juste LocalDate.parse(rawDate)! String.formatest utilisé sous une forme totalement incorrecte ici, renvoyant en fait simplement la première chaîne; le DateTimeFormattern'est pas du tout utilisé; parseest une staticméthode de LocalDate; formattedDaten'est pas une date formatée, pas même une String(comme demandé en question)
user85421
0

Il existe un moyen intégré de formater LocalDate pour joda lib

import org.joda.time.LocalDate;

LocalDate localDate = LocalDate.now();
String dateFormat = "MM/dd/yyyy";
localDate.toString(dateFormat);

Si vous ne l'avez pas déjà, ajoutez ceci au build.gradle:

implementation 'joda-time:joda-time:2.9.5'

Bon codage! :)

Inoy
la source
1
Pas selon le javadoc.
Edward
@Edward, si ce n'est pas le cas, prouvez-le et fournissez une solution que vous jugez meilleure.
Inoy
1
vous voulez que je prouve que LocalDate.toString (modèle de chaîne) n'existe PAS? Veuillez fournir une référence à cette méthode si elle existe - je n'ai pu la trouver dans aucun javadocs. Quant à la solution, cette question l'a déjà.
Edward
@Edward, On dirait que vous avez du mal à le trouver. Mis à jour ma réponse.
Inoy
Joda Time n'est pas "intégré". OP semble utiliser java.time.LocalDate, pas joda.time
Edward
-11

Une bonne façon de faire cela est d'utiliser SimpleDateFormatje vais vous montrer comment:

SimpleDateFormat sdf = new SimpleDateFormat("d MMMM YYYY");
Date d = new Date();
sdf.format(d);

Je vois que vous avez la date dans une variable:

sdf.format(variable_name);

À votre santé.

nom
la source
3
OP souhaite imprimer le contenu d'une LocalDateinstance dans un format spécifique. Comment pourrait l' SimpleDateFormataider ici?
Tom