我有一些Java代码,它从给定的纪元时间返回ISO-8601时间格式.
public String getISO8601(String epochTime) {
long epoch = Long.parseLong(epochTs);
ZoneId zone = ZoneId.of("Europe/London");
LocalDate then = Instant.ofEpochMilli(epoch).atZone(zone).toLocalDate();
LocalDate today = LocalDate.now(zone);
Period diff = Period.between(then, today);
return diff.toString();
}
Run Code Online (Sandbox Code Playgroud)
当我将epochTime传递给它时: 1512259200000
此纪元时间是:2017年3月30日00:00:00
所以方法getISO8601将返回: P1Y
这很棒!但有没有什么方法可以确保它永远只会在几天内返回...例如:P365D(而不是:P1Y)
不幸的是Period,不允许指定单位,但您可以使用该until方法来处理这个,指定您希望天数的差异:
public static Period getPeriodInDaysBetween(LocalDate from, LocalDate to) {
int days = (int) from.until(to, ChronoUnit.DAYS);
return Period.ofDays(days);
}
Run Code Online (Sandbox Code Playgroud)
Period.between我相信,使用它而不是它会做你想要的.
(第一行相当于ChronoUnit.DAYS.between(date1, date2)MS90的答案.使用你认为更具可读性的那一行.)