Возвращать формат времени ISO-8601 в днях с времени эпохи в Java - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть некоторый 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

Это время эпохиis: вс 2017-12-03 00: 00: 00

Таким образом, метод getISO8601 вернет: P1Y

Это здорово!Но есть ли способ, которым я могу быть уверен, что он всегда и только вернется через дни ... например: P365D (вместо: P1Y)

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

К сожалению, 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. Используйте то, что вы найдете более читабельным.)

0 голосов
/ 03 декабря 2018

Конечно, взгляните на следующий код:

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

        long daysInAPeriod = ChronoUnit.DAYS.between(date1, date2);
        return daysInAPeriod;
    }
0 голосов
/ 03 декабря 2018

Period имеет метод getDays, который возвращает целое число дней в Period.

...