【问题标题】:Return ISO-8601 time format in days from Epoch time in Java从 Java 中的 Epoch 时间开始以天为单位返回 ISO-8601 时间格式
【发布时间】:2019-05-04 16:10:24
【问题描述】:

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

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

所以getISO8601方法会返回:P1Y

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

【问题讨论】:

标签: java time epoch


【解决方案1】:

不幸的是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)。使用您认为更易读的那个。)

【讨论】:

    【解决方案2】:

    好的,看看下面的代码:

       public static long countDays(LocalDate date1, LocalDate date2) {
    
            long daysInAPeriod = ChronoUnit.DAYS.between(date1, date2);
            return daysInAPeriod;
        }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 当我做return Period.between(then, today).getDays(); 它返回:0,而不是 365D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多