将持续时间字符串转换为以毫秒为单位的Java

问题描述:

如果已经讨论过,请致歉。将持续时间字符串转换为以毫秒为单位的Java

我有一个夹子持续时间的字符串:

00:10:17 

我想将其转换成值以毫秒为单位。 (对于上面的字符串基本上是617000)

是否有一些API可用于在一个或两个步骤中完成此操作。 基本的方法是分割字符串,然后添加分钟,秒和小时。

但是有没有更简单的方法来做到这一点?

谢谢。

+0

日期在哪里? – 2013-03-14 13:25:17

+0

没有日期,只是持续时间在HH:MM:SS – Sunny 2013-03-14 13:26:09

+0

类似的问题:[Java:如何将字符串(HH:MM:SS)转换为持续时间?](http://stackoverflow.com/q/8257641/642706 ) – 2017-01-03 22:05:39

这是一个自己写的可能的方法(同样源格式的假设总是)

String source = "00:10:17"; 
String[] tokens = source.split(":"); 
int secondsToMs = Integer.parseInt(tokens[2]) * 1000; 
int minutesToMs = Integer.parseInt(tokens[1]) * 60000; 
int hoursToMs = Integer.parseInt(tokens[0]) * 3600000; 
long total = secondsToMs + minutesToMs + hoursToMs; 
+0

@Sunny谢谢接受(但assylias的答案有更清晰的解决方案,所以使用assylias的解决方案。 – Sajmon 2013-03-14 13:46:55

检查出Joda TimeDuration类。

+0

仅供参考,[Joda-Time](http://www.joda.org/joda-time/)项目现在处于[维护模式](https://en.wikipedia.org/wiki/Maintenance_mode),团队建议迁移到[java.time](http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)类。 – 2017-01-03 22:41:10

创建一个合适的DateFormat实例。使用parse()方法获得Date。在Date对象上使用getTime()可以获得毫秒。您可以检查here

我只是测试它为:

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

public class Test {   
    public static void main(String[] args) throws Exception { 
     SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
     sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 

     String inputString = "00:10:17"; 

     Date date = sdf .parse(inputString);// .parse("1970-01-01" + inputString); 
     System.out.println("in milliseconds: " + date.getTime());   
    } 
} 
+0

我不认为这会起作用。 – assylias 2013-03-14 13:29:16

+0

是的,它不会工作,因为它会给以毫秒为单位的时间直到那个特定的时间 – Sunny 2013-03-14 13:30:18

+0

使它在链接中工作的“技巧”是将日期设置为1970年1月1日。如果你不这样做,你将得到一个错误的结果。 – assylias 2013-03-14 13:31:52

你可以简单地手动分析它:

String s = "00:10:17"; 
String[] data = s.split(":"); 

int hours = Integer.parseInt(data[0]); 
int minutes = Integer.parseInt(data[1]); 
int seconds = Integer.parseInt(data[2]); 

int time = seconds + 60 * minutes + 3600 * hours; 
System.out.println("time in millis = " + TimeUnit.MILLISECONDS.convert(time, TimeUnit.SECONDS)); 
+0

''TimeUnit.MILLISECONDS.convert(time,TimeUnit.SECONDS)+1'assylias);'哇:]我真的不知道这件事。很好的触摸 – Sajmon 2013-03-14 13:36:41

+1

@Sajmon我本可以用它来计算时间,但是有点懒 - 它被公认是相当详细的;-) – assylias 2013-03-14 13:37:33

+0

所以很高兴知道TimeUnit。我喜欢! – Sajmon 2013-03-14 13:48:18

java.time.Duration

使用Duration类。

Duration.between( 
    LocalTime.MIN , 
    LocalTime.parse("00:10:17") 
).toMillis() 

毫秒:617000

看到这个code live in IdeOne.com

请参阅this Answer of minethis Answer of mine到类似的问题,以获得更多有关Duration,LocalTime和java.time的解释。

注意:在java.time对象从nanoseconds可能值转换为所需milliseconds可能的数据丢失的当心。