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,我认为它支持这个用例。不用担心,他使用的是局部变量。