代码之家  ›  专栏  ›  技术社区  ›  Saffik

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

  •  1
  • Saffik  · 技术社区  · 7 年前

    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();
    }
    

    1512259200000

    太阳2017-12-03 00:00:00

    因此,getISO8601方法将返回: P1Y

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

    3 回复  |  直到 7 年前
        1
  •  5
  •   Jon Skeet    7 年前

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

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

    Period.between 我相信它会满足你的要求。

    (第一行相当于 ChronoUnit.DAYS.between(date1, date2) 在MS90的回答中。使用您认为更可读的。)

        2
  •  1
  •   MS90    7 年前

       public static long countDays(LocalDate date1, LocalDate date2) {
    
            long daysInAPeriod = ChronoUnit.DAYS.between(date1, date2);
            return daysInAPeriod;
        }
    
        3
  •  -1
  •   Igor Ivanisevic    7 年前

    Period有一个getDays方法,它返回Period中的整数天数。