How to convert HH:mm:ss.SSS to milliseconds?
我有一个String
我试过如下:
1 2 3 4 | String startAfter ="00:01:30.555"; SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS"); Date date = dateFormat.parse(startAfter); System.out.println(date.getTime()); |
您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package se.wederbrand.milliseconds; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class Main { public static void main(String[] args) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); String inputString ="00:01:30.500"; Date date = sdf.parse("1970-01-01" + inputString); System.out.println("in milliseconds:" + date.getTime()); } } |
如果您想自己解析格式,可以使用正则表达式轻松完成
1 2 3 4 5 6 7 8 9 10 11 12 13 | private static Pattern pattern = Pattern.compile("(\\d{2}):(\\d{2}):(\\d{2}).(\\d{3})"); public static long dateParseRegExp(String period) { Matcher matcher = pattern.matcher(period); if (matcher.matches()) { return Long.parseLong(matcher.group(1)) * 3600000L + Long.parseLong(matcher.group(2)) * 60000 + Long.parseLong(matcher.group(3)) * 1000 + Long.parseLong(matcher.group(4)); } else { throw new IllegalArgumentException("Invalid format" + period); } } |
但是,这种解析非常宽松,可以接受99:99:99.999,只是让值溢出。这可能是一个缺点或特征。
使用JODA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | PeriodFormatter periodFormat = new PeriodFormatterBuilder() .minimumParsedDigits(2) .appendHour() // 2 digits minimum .appendSeparator(":") .minimumParsedDigits(2) .appendMinute() // 2 digits minimum .appendSeparator(":") .minimumParsedDigits(2) .appendSecond() .appendSeparator(".") .appendMillis3Digit() .toFormatter(); Period result = Period.parse(string, periodFormat); return result.toStandardDuration().getMillis(); |
如果你想使用
1 2 3 4 5 6 | private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); { sdf.setTimeZone(TimeZone.getTimeZone("GMT")); } private long parseTimeToMillis(final String time) throws ParseException { return sdf.parse("1970-01-01" + time).getTime(); } |
但是自定义方法会更有效率。
此外,
就个人而言,我可能会写一个自定义方法。