如何在Java 8 / jsr310中格式化句点?

2022-09-02 01:42:53

我想使用类似 .Java 8 中的实用程序旨在格式化时间,但既不格式化时间段,也不格式化持续时间。在Joda时间有一个周期格式器。Java有类似的实用程序吗?YY years, MM months, DD days


答案 1

一种解决方案是简单地使用String.format

import java.time.Period;

Period p = Period.of(2,5,1);
String.format("%d years, %d months, %d days", p.getYears(), p.getMonths(), p.getDays());

如果你真的需要使用DateTimeFormatter的功能,你可以使用一个临时的LocalDate,但这是一种扭曲LocalDate语义的黑客攻击。

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

Period p = Period.of(2,5,1);
DateTimeFormatter fomatter = DateTimeFormatter.ofPattern("y 'years,' M 'months,' d 'days'");
LocalDate.of(p.getYears(), p.getMonths(), p.getDays()).format(fomatter);

答案 2

无需使用简单的字符串格式设置。使用普通的旧字符串串联将由JVM优化:String.format()

Function<Period, String> format = p -> p.getYears() + " years, " + p.getMonths() + " months, " + p.getDays() + " days";