Comment imprimer une date avec un format personnalisé en Java 8?

SIRS:

Je voudrais créer un graphique en forme que celle affichée ci-dessous:

entrez la description d'image ici

Le nombre de caractères dans chacune des zones est de 4, 12, 17, 40 et 4 respectivement. Les champs sont également justifiées à gauche.

En utilisant le code que j'affichées ci-dessous, mon apparence de résultat comme ceci:

Extrait de code pour le formatage:

for (Tasks examined : shortList) {
  String yesNo = examined.isDone() == true ? "yes" : "no";
  System.out.printf("%1$-4s" + "| " + "%2$tY.%<tm.%<-12td." 
     + "| " + "%3$-17s" + "| " + "%4$-40s" + "| " + yesNo + "\n"
               , examined.getNumber(), examined.getDeadline()
               , importanceLevel, examined.getName())
}

Les types de variables sont les suivantes:

examined.getNumber() //integer
examined.getDeadline() //DateTime
importanceLevel //String
examined.getName() //String

J'ai étudié la classe Formatter dans les JavaDocs ici . Mais je ne pouvait pas résoudre le problème.

La question principale ici, est le point ( . ) À la fin du champ « date ». Il ne devrait pas avoir tout ce que les espaces entre la date et l'arrêt complet.

Je voulais organiser la largeur de l'élément « date », avec le drapeau -12, mais juste coupé le reste comme le point final ci-dessus.

Comment cela pourrait-il être résolu?

Soutzikevich:

Cela pourrait résoudre votre problème, si je comprends bien vos besoins:

int index = 1;
                                   //yyyy, MM, dd, hh, min
LocalDateTime ldt = LocalDateTime.of(2018, 12, 31, 12, 10);
                               //specify custom pattern here
String date = DateTimeFormatter.ofPattern("yyyy.MM.dd.").format(ldt);
String importance = "kozepesen fontos";
String name = "egyik feladat";
String yesNo = "yes";
String formatter = "%-4d| %-12s| %-17s| %-40s| %-5s%n";
//now use System.out.format() to print with pattern specified in 'formatter'
System.out.format(formatter, index, date, importance, name, yesNo);

sortie :1 | 2018.12.31. | kozepesen fontos | egyik feladat | yes

  1. Dans la solution ci - dessus, nous convertissons inévitablement la date à une chaîne. Autrement dit, afin que nous puissions définir une coutume modèle pour afficher la date. Tout d' abord , nous créons un DateTimeFormatter()exemple, avec le motif désiré. Le motif est spécifié avec l'DateTimeFormatter ofPattern(String pattern)méthode. Ensuite, pour obtenir une chaîne comme type de retour, nous utilisons la format(TemporalAccessor temporal)méthode de DateTimeFormatter à nouveau. Nous pouvons utiliser l'instance DateTime comme TemporalAccessorparamètre format(), comme indiqué dans le code ci - dessus.

  2. Alors , comment le String formatter = "%-4d| %-12s| %-17s| %-40s| %5s%n"travail? J'ai utilisé la syntaxe de la documentation Formatter pour Java 8.

    --> Le résultat sera justifié à gauche .

    %-> Le résultat est un littéral .

    n-> Le résultat est le séparateur de ligne spécifique à la plate-forme .

    d-> Le résultat est formaté en tant que nombre entier décimal .

    s-> Si l'argument arg est null, alors le résultat est « nul ». Si arg implements Formattable, puis arg.formatTo()est invoqué. Dans le cas contraire, on obtient le résultat en invoquantarg.toString() .

    Enfin, les chiffres que j'ai utilisé, indiquez le nombre de caractères pour permettre chaque champ.

  3. Puis enfin, nous appelons au System.out.formatlieu de printf(), où la chaîne spécifiant le format est le premier paramètre et toutes les autres variables au format doit être saisi dans le bon ordre (le même ordre que celui de la chaîne spécifiant le format ).

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=204219&siteId=1
conseillé
Classement