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

Java 将具有时间的字符串转换为毫秒数,java,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.getT

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

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个。

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

不过,这里有另一种方法:

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

double sec = Integer.parseInt(hms[0]) * 3600
           + Integer.parseInt(hms[1]) * 60
           + Double.parseDouble(hms[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()));

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

如果我这样做

Date begin = new Date().setTime(0);
System.out.println(begin);
我得到这个输出:

欧洲中部时间1970年1月1日星期四01:00:00


因此,在00:00::00和01:00:00之间,我的时区的毫秒数为负数。

不要忘记SimpleDataFormat不是线程安全的,它应该这样命名:

    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) { /*...*/ };
};
private static final ThreadLocal SIMPLE\u DATE\u FORMAT=new ThreadLocal(){
@重写受保护的SimpleDataFormat initialValue(){返回新的SimpleDataFormat(“格式”);};
@重写公共无效集(SimpleDataFormat值){/*…*/};
};

在时间间隔中使用面向即时的日期解析器是一种非常糟糕的做法,容易出现各种意外错误。如果您想要库支持,请尝试JodaTime,我认为它支持这个用例。不用担心,他使用的是局部变量。