从Java的Epoch时间开始,以天为单位返回ISO-8601时间格式

Saf*_*fik 1 java time epoch

我有一些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)

Jon*_*eet 5

不幸的是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的答案.使用你认为更具可读性的那一行.)