将带有时间的字符串转换为毫秒数

时间:2012-05-24 11:01:13

标签: java

我需要将以下字符串转换为秒数 我尝试使用以下代码执行此操作:

String sDuration = "00:00:24.20";
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SS");
videoLength = dateFormat.parse(sDuration);
Logger.debug("Duration: " + videoLength + " timestamp: " + videoLength.getTime());

但我得到的回应是:

Duration: Thu Jan 01 00:00:24 GMT 1970 timestamp: -3575980

第一个似乎很好,但我需要.getTime()进行计算,我得到一个负数? 我希望得到像24200这样的东西。

4 个答案:

答案 0 :(得分:4)

不完全确定Date是否打算用于持续时间(而不是时间点)。

这是另一种方法:

String[] hms = sDuration.split(":");

double sec = Integer.parseInt(hms[0]) * 3600
           + Integer.parseInt(hms[1]) * 60
           + Double.parseDouble(hms[2]);

答案 1 :(得分:2)

又一种方法:

String sDuration = "00:00:24.20";
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SS");
Date end = dateFormat.parse(sDuration);
Date start = dateFormat.parse("00:00:00.00");
System.out.println("Duration: " + (end.getTime() - start.getTime()));

答案 2 :(得分:1)

我一直在做一些测试,其背后的原因是你所在的时区。

如果我这样做

Date begin = new Date().setTime(0);
System.out.println(begin);

我得到了这个输出:

Thu Jan 01 01:00:00 CET 1970

所以00:00 :: 00和01:00:00之间的任何时间都会为我的时区带来负的毫秒数。

答案 3 :(得分:0)

不要忘记SimpleDateFormat 是线程安全的,它应该像这样调用:

    private static final ThreadLocal<SimpleDateFormat> SIMPLE_DATE_FORMAT = new ThreadLocal<SimpleDateFormat>() {
    @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("format"); };
    @Override public void set(SimpleDateFormat value) { /*...*/ };
};