我需要将以下字符串转换为秒数 我尝试使用以下代码执行此操作:
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这样的东西。
答案 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) { /*...*/ };
};