gpt4 book ai didi

java - 如何在 Java 8 中使用自定义格式打印日期?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:46 25 4
gpt4 key购买 nike

我想创建一个如下所示的格式化图表:

enter image description here

每个字段中的字符数分别为 4、12、17、40 和 4。这些字段也是左对齐的。

通过使用我在下面发布的代码,我的结果如下所示:

格式化代码片段:

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

变量类型是:

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

我研究了 JavaDocs 中的 Formatter 类 here .但我无法解决问题。

这里的主要问题是“日期”字段末尾的点 (.)。它不应该在日期和句号之间有那么多空白。

我想用 -12 标志来组织“日期”元素的宽度,但这只是将其余部分剪掉作为上面的最后一个点。

如何解决?

最佳答案

如果我正确理解了您的要求,这可能会解决您的问题:

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

输出:

1 | 2018.12.31. | kozepesen fontos | egyik feladat |是的

  1. 在上面的解决方案中,我们不可避免地将日期转换为字符串。也就是说,我们可以指定一个自定义 模式来显示日期。首先,我们创建一个具有所需模式的 DateTimeFormatter() 实例。该模式是使用 DateTimeFormatter 的 ofPattern(String pattern) 方法指定的。然后,为了获取 String 作为返回类型,我们再次使用 DateTimeFormatter 中的 format(TemporalAccessor temporal) 方法。我们可以使用 DateTime 实例作为 format() 中的 TemporalAccessor 参数,就像上面的代码所示。

  2. String formatter = "%-4d| %-12s| %-17s| %-40s| %5s%n" 是如何工作的?我使用了 Formatter documentation 的语法适用于 Java 8。

    - -> 结果将左对齐

    % -> 结果是文字

    n -> 结果是特定于平台的行分隔符

    d -> 结果被格式化为十进制整数

    s -> 如果参数 arg 为 null,则结果为“null”。如果 arg implements Formattable,则调用 arg.formatTo()。否则,通过调用 arg.toString() 获得结果。

最后,我使用的数字指定了每个字段允许的字符数。

  1. 最后,我们调用 System.out.format 而不是 printf(),其中 format-specifying string第一个 参数和所有其他要格式化的变量必须以正确的顺序 输入(与指定格式的字符串 中的顺序相同)。

关于java - 如何在 Java 8 中使用自定义格式打印日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54183769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com