如何在Java8中使用自定义格式打印日期?
我想创建一个格式化的图表,如下所示: 每个字段中的字符数分别为4、12、17、40和4。字段也是左对齐的 通过使用我在下面发布的代码,我的结果如下所示: 用于格式化的代码段:如何在Java8中使用自定义格式打印日期?,java,string,date,printf,Java,String,Date,Printf,我想创建一个格式化的图表,如下所示: 每个字段中的字符数分别为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."
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())
}
我在JavaDocs中学习了格式化程序类。但我无法解决这个问题
这里的主要问题是“日期”字段末尾的点()。日期和句号之间不应该有那么多空格
我想用-12标记来组织“date”元素的宽度,但这只是将其余部分作为上面的最后一个点
如何解决这个问题?如果我正确理解您的要求,这可能会解决您的问题:
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|是
DateTimeFormatter()
实例。模式是用DateTimeFormatter的模式(字符串模式)方法指定的。然后,为了得到一个字符串作为返回类型,我们再次使用DateTimeFormatter中的格式(TemporalAccessor temporal)
方法。我们可以使用DateTime实例作为format()
中的TemporalAccessor
参数,正如上面的代码所示
字符串格式化程序=“%-4d |%-12s |%-17s |%-40s |%5s%n”
是如何工作的呢?
我使用了Java8的语法
-
->结果将左对齐
%
->结果是一个文本
n
->结果是特定于平台的行分隔符
d
->结果格式为十进制整数
s
->如果参数arg为null
,则结果为“null”。如果arg实现Formattable
,则调用arg.formatTo()
。否则,将通过调用arg.toString()
获得结果
System.out.format
而不是printf()
,其中指定格式的字符串是第一个参数,要格式化的所有其他变量必须按正确的顺序键入(与指定格式的字符串中的顺序相同)您能否在格式化之前显示这些变量的外观<代码>检查过的.getNumber(),检查过的.getDeadline(),importanceLevel,检查过的.getName()确定。正常数,如1,日期存储在日期时间格式:2018和12和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);