2013-03-14 3 views
1

Прошу прощения, если это уже обсуждалось.Преобразование строки продолжительности в миллисекунды в Java

У меня есть длительность клипа в строке:

00:10:17 

Я хотел бы преобразовать, что значение в миллисекундах. (В основном 617000 для указанной строки)

Есть ли какой-нибудь API, который я мог бы использовать для этого в один или два шага. Основным способом было бы разбить строку, а затем добавить минуты, секунды и часы.

Но есть ли более короткий способ сделать это?

Спасибо.

+0

Где дата? –

+0

нет даты, просто продолжительность в HH: MM: SS – Sunny

+0

Аналогичный вопрос: [Java: как преобразовать строку (HH: MM: SS) в продолжительность?] (Http://stackoverflow.com/q/8257641/642706) –

ответ

1

Вот один собственный написанный возможный подход (допущение того же исходного формата всегда)

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

0

Проверьте класс Joda TimeDuration.

+0

FYI, проект [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). –

0

Создайте соответствующий экземпляр DateFormat. Используйте метод parse(), чтобы получить Date. Используйте getTime() на объекте Date, чтобы получить миллисекунды.

Вы можете проверить 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

+0

да, это не сработает, так как это даст время в миллисекундах до этого конкретного времени. – Sunny

+0

«Трюк», который заставляет его работать в ссылке, - установить день до 1 января 1970 года. Если вы этого не сделаете, вы получите неверный результат. – assylias

6

Вы можете просто разобрать его вручную:

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

+1 assylias для 'TimeUnit.MILLISECONDS.convert (time, TimeUnit.SECONDS));' Wow:] я действительно не знал об этом. Nice touch – Sajmon

+1

@Sajmon Я мог бы использовать его для расчета времени тоже, но был немного ленив - это, по общему признанию, довольно многословный ;-) – assylias

+0

, так что хорошо знать о TimeUnit. мне это нравится! – Sajmon

1

java.time.Duration

Используйте класс Duration.

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

миллисекунды: 617000

Смотреть это code live in IdeOne.com.

См this Answer of mine и this Answer of mine аналогичные вопросы для более подробного объяснения о Duration, LocalTime, и java.time.

Внимание: Остерегайтесь возможными потерями данных при преобразовании из возможных значений nanoseconds в объектах java.time к вашему желанию milliseconds.

Смежные вопросы