DASH Manifest中PT时间格式是什么?Java如何将其转成毫秒?
问题解答
一、时间格式定义
你遇到的PT461486H44M42.24S是ISO 8601标准的持续时间格式,DASH规范用它来标记媒体时间段的起始偏移量,格式拆解如下:
P:标记这是一个持续时间(Period)T:分隔日期与时间部分(此例无日期,直接衔接时间单元)461486H:代表461486小时(H为小时单位标识)44M:代表44分钟(M为分钟单位标识)42.24S:代表42.24秒(S为秒单位标识,小数部分对应毫秒级精度)
二、Java中转换为毫秒数的实现
SimpleDateFormat仅用于解析常规日期时间格式,无法处理这种持续时间格式,推荐用以下两种方案:
方案1:Java 8+ 原生API(java.time.Duration)
JDK8引入的新时间API可以直接解析ISO 8601持续时间格式,代码示例:
String durationStr = "PT461486H44M42.24S"; Duration duration = Duration.parse(durationStr); long milliseconds = duration.toMillis(); // 输出转换后的毫秒数 System.out.println(milliseconds);
该类支持大数值的小时单位,完全能处理示例中的46万多小时场景。
方案2:JDK8之前的兼容方案(javax.xml.datatype.Duration)
如果项目基于JDK7及以下,可借助XML相关的Duration类实现转换:
import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; public class DurationConverter { public static void main(String[] args) throws DatatypeConfigurationException { String durationStr = "PT461486H44M42.24S"; Duration duration = DatatypeFactory.newInstance().newDuration(durationStr); // 传入任意参考日期即可,不影响总持续时间的毫秒计算 long milliseconds = duration.getTimeInMillis(new java.util.Date()); System.out.println(milliseconds); } }
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

