我需要将持续时间字符串解析98d 01h 23m 45s为毫秒形式。
98d 01h 23m 45s
我希望SimpleDateFormat像这样的持续时间相等,但是我什么也找不到。有人会建议为此目的使用或支持SDF吗?
SimpleDateFormat
我目前的计划是使用正则表达式来匹配数字并做类似的事情
Pattern p = Pattern.compile("(\\d+)"); Matcher m = p.matcher("98d 01h 23m 45s"); if (m.find()) { int days = Integer.parseInt(m.group()); } // etc. for hours, minutes, seconds
然后使用TimeUnit将它们放在一起并转换为毫秒。
我想我的问题是,这似乎有点过头了,它可以轻松完成吗?出现了很多有关日期和时间戳的问题,但这也许有些不同。
使用a Pattern是一种合理的方法。但是,为什么不使用单个字段来获取所有四个字段呢?
Pattern
Pattern p = Pattern.compile("(\\d+)d\\s+(\\d+)h\\s+(\\d+)m\\s+(\\d+)s");
然后使用索引组提取。
编辑:
基于您的想法,我最终编写了以下方法
private static Pattern p = Pattern .compile("(\\d+)d\\s+(\\d+)h\\s+(\\d+)m\\s+(\\d+)s"); /** * Parses a duration string of the form "98d 01h 23m 45s" into milliseconds. * * @throws ParseException */ public static long parseDuration(String duration) throws ParseException { Matcher m = p.matcher(duration); long milliseconds = 0; if (m.find() && m.groupCount() == 4) { int days = Integer.parseInt(m.group(1)); milliseconds += TimeUnit.MILLISECONDS.convert(days, TimeUnit.DAYS); int hours = Integer.parseInt(m.group(2)); milliseconds += TimeUnit.MILLISECONDS .convert(hours, TimeUnit.HOURS); int minutes = Integer.parseInt(m.group(3)); milliseconds += TimeUnit.MILLISECONDS.convert(minutes, TimeUnit.MINUTES); int seconds = Integer.parseInt(m.group(4)); milliseconds += TimeUnit.MILLISECONDS.convert(seconds, TimeUnit.SECONDS); } else { throw new ParseException("Cannot parse duration " + duration, 0); } return milliseconds; }