返回ISO-8601时间格式(从Java中的历元时间算起,以天为单位)

返回ISO-8601时间格式(从Java中的历元时间算起,以天为单位),java,time,epoch,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(); Lo

我有一些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();
}
当我向它传递epochTime时:
1512259200000

这个大纪元的时间是:太阳2017-12-03 00:00:00

因此方法getISO8601将返回:
P1Y


这太棒了!但是有没有什么办法我可以确保它永远只会在几天后回来。。。例如:P365D(而不是:P1Y)

Period有一个getDays方法,返回期间的整数天数。

Period有一个getDays方法,返回期间的整数天数。

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

public static Period getPeriodInDaysBetween(LocalDate from, LocalDate to) {
    int days = (int) from.until(to, ChronoUnit.DAYS);
    return Period.ofDays(days);
}
用它来代替句号。我相信,在之间,它会做你想做的事情


(第一行相当于MS90答案中的
ChronoUnit.DAYS.between(date1,date2)
。请使用您认为可读性更好的方法。)

不幸的是
Period
不允许指定单位,但您可以使用
直到
方法来处理此问题,指定您希望以天为单位的差值:

public static Period getPeriodInDaysBetween(LocalDate from, LocalDate to) {
    int days = (int) from.until(to, ChronoUnit.DAYS);
    return Period.ofDays(days);
}
用它来代替句号。我相信,在
之间,它会做你想做的事情


(第一行相当于MS90答案中的
ChronoUnit.DAYS.between(date1,date2)
。请使用您认为可读性更好的代码。)

当然,请查看以下代码:

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

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

当然,请查看以下代码:

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

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

当我执行
返回期间.between(然后,今天).getDays()时它返回:0,而不是返回期间.between(然后,今天).getDays()时的365dW它返回:0,而不是