Рассчитать продолжительность двух точек во времени 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 .
- По любой причине, если вам нужно придерживаться Java 6 или Java 7, вы можете использовать <em><strong>ThreeTen-Backport,</strong></em> который поддерживает большую часть функциональности java.time для Java 6 и 7.
- Если вы работаете над проектом Android, и ваш уровень API Android по-прежнему не соответствует Java-8, проверьте API-интерфейсы Java 8+, доступные через десугаринг, а также Как использовать ThreeTenABP в Android Project .