如何将 HH:mm:ss.SSS 转换为毫秒?

新手上路,请多包涵

我有一个字符串 00:01:30.500 相当于 90500 毫秒。我尝试使用 SimpleDateFormat 给出包括当前日期在内的毫秒数。我只需要毫秒级的字符串表示。我是否必须编写自定义方法来拆分和计算毫秒数?或者还有其他方法吗?谢谢。

我试过如下:

         String startAfter = "00:01:30.555";
        SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS");
        Date date = dateFormat.parse(startAfter);
        System.out.println(date.getTime());

原文由 Ahamed 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可以使用 SimpleDateFormat 来做到这一点。你只需要知道两件事。

  1. 所有日期都在内部以 UTC 表示
  2. .getTime() 返回自 1970-01-01 00:00:00 UTC 以来的毫秒数。
 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());
    }
}

原文由 Andreas Wederbrand 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您想自己解析格式,可以使用正则表达式轻松完成,例如

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 并让值溢出。这可能是缺点或功能。

原文由 Roger Lindsjö 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题