Cómo imprimir una fecha con un formato personalizado en Java 8?

SIRS:

Me gustaría crear un gráfico con formato como el que se muestra a continuación:

introducir descripción de la imagen aquí

El recuento de caracteres en cada uno de los campos es de 4, 12, 17, 40 y 4, respectivamente. Los campos también están justificados a la izquierda.

Al utilizar el código que he publicado a continuación, mi resultado se ve así:

Fragmento de código para dar formato a:

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())
}

Los tipos de variables son:

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

He estudiado la clase de formateador en las JavaDocs aquí . Pero tengo no podía resolver el problema.

El principal problema aquí, es el punto ( . ) Al final del campo 'fecha'. No debe tener todo ese espacio en blanco entre la fecha y el punto final.

Quería organizar el ancho del elemento 'fecha', con la bandera -12, pero que acaba de cortar el resto como el punto final sobre la superficie.

¿Cómo pudo ser resuelto?

Soutzikevich:

Esto podría resolver su problema, si he entendido correctamente sus requisitos:

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

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

  1. En la solución anterior, convertimos inevitablemente a la fecha en una cadena. Es decir, para que podamos especificar una costumbre patrón para la visualización de la fecha. En primer lugar se crea una DateTimeFormatter()instancia, con el patrón deseado. El patrón se especifica con del DateTimeFormatter ofPattern(String pattern)método. Entonces, para obtener una cadena como el tipo de retorno, se utiliza el format(TemporalAccessor temporal)método de DateTimeFormatter nuevo. Podemos utilizar la instancia de fecha y hora como el TemporalAccessorparámetro en format(), simplemente, como se muestra en el código de seguridad.

  2. Entonces, ¿cómo String formatter = "%-4d| %-12s| %-17s| %-40s| %5s%n"el trabajo? He utilizado la sintaxis de la documentación del formateador para Java 8.

    --> El resultado será justificado a la izquierda .

    %-> El resultado es un literal .

    n-> El resultado es el separador de línea de plataforma específica .

    d-> El resultado está formateado como un entero decimal .

    s-> Si el argumento arg es null, entonces el resultado es "nula". Si arg implements Formattable, a continuación, arg.formatTo()se invoca. De lo contrario, el resultado se obtiene mediante la invocaciónarg.toString() .

    Por último, los números que he utilizado, especifican la cantidad de caracteres para permitir para cada campo.

  3. Entonces, finalmente, que llamamos System.out.formaten lugar de printf(), donde la cadena de formato, que especifica es el primer parámetro y todas las otras variables en formato debe escribirse en el orden correcto (el mismo orden que el de la cadena de formato, especificando ).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=204223&siteId=1
Recomendado
Clasificación