Рассчитать продолжительность двух точек во времени ISO 8601

У меня есть следующие данные:

"startAt": "PT0S",
"endAt": "PT21M12.667S"

startAt определяет начало видео и endAt в конце видео. Как я могу рассчитать время между этими точками? Я предполагаю, что это ISO 8601, и я использую Java, но библиотека, которую я пробовал (Joda), не работает с параметром endAt.

2 ответа

Решение

Это значения периода ISO-8601 (не точки во времени), и Joda Time прекрасно с ними справляется:

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String startText = "PT0S";
        String endText = "PT21M12.667S";

        PeriodFormatter format = ISOPeriodFormat.standard();
        Period start = format.parsePeriod(startText);
        Period end = format.parsePeriod(endText);

        Duration duration = end.minus(start).toStandardDuration();
        System.out.println(duration); // PT1272.667S
        System.out.println(duration.getMillis()); // 1272667
    }
}

Использование стандартной библиотеки Java-8

<tcode id="397022"></tcode>создан по образцу стандартов ISO-8601 и был введен как часть реализации JSR-310 .

Демо:

      import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        String startAt = "PT0S";
        String endAt = "PT21M12.667S";
        Duration start = Duration.parse(startAt);
        Duration end = Duration.parse(endAt);
        long millis = end.minus(start).toMillis();
        System.out.println(millis);
    }
}

Выход:

      1272667

Узнайте больше о современном API даты и времени из Trail: Date Time .

Другие вопросы по тегам