Return ISO-8601 时间格式(从 Java 中的大纪元开始的天数)

Return ISO-8601 time format in days from Epoch time in Java

我有一些 Java 代码,其中 return 是给定纪元时间的 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();
}

当我将 epochTime 传递给它时:1512259200000

这个纪元时间是:Sun 2017-12-03 00:00:00

所以方法 getISO8601 将 return: P1Y

太棒了!但是有什么办法可以确保它总是并且只在几天内 return ......例如:P365D(而不是:P1Y)

Period 有一个 getDays 方法returnsPeriod 中的整数天数。

不幸的是 Period 不允许指定单位,但您可以使用 until 方法来处理此问题,指定您想要天数的差异:

public static Period getPeriodInDaysBetween(LocalDate from, LocalDate to) {
    int days = (int) from.until(to, ChronoUnit.DAYS);
    return Period.ofDays(days);
}

用它代替 Period.between,我相信它会做你想做的事。

(第一行等同于MS90的回答中的ChronoUnit.DAYS.between(date1, date2),你觉得哪个更易读就用哪个吧。)

好的,请看下面的代码:

   public static long countDays(LocalDate date1, LocalDate date2) {

        long daysInAPeriod = ChronoUnit.DAYS.between(date1, date2);
        return daysInAPeriod;
    }