Число секунд в “HH:MM:SS”

Что лучший способ состоит в том, чтобы получить число секунд в строковом представлении как "hh:mm:ss"?

Очевидно, Integer.parseInt (s.substring (...)) * 3600 + Integer.parseInt (s.substring (...)) * 60 + Integer.parseInt (s.substring (...)) работы.

Но я не хочу тестировать это и переосмысливать волдырь, я ожидаю, что существует способ использовать DateTimeFormat или другие классы из стандартных библиотек.

Спасибо!

7
задан Bogdan Balan 8 July 2010 в 17:51
поделиться

4 ответа

На основе pakores решения :

    DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    Date reference = dateFormat.parse("00:00:00");
    Date date = dateFormat.parse(string);
    long seconds = (date.getTime() - reference.getTime()) / 1000L;

ссылка используется для компенсации разных часовых поясов, и нет проблем с переходом на летнее время, потому что SimpleDateFormat НЕ использует фактическую дату, это вернуть дату Epoc (1 января 1970 г. = без летнего времени).

Упрощение (не очень):

    DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date date = dateFormat.parse("01:00:10");
    long seconds = date.getTime() / 1000L;

но я бы все же посмотрел на Joda-Time ...

14
ответ дан 6 December 2019 в 10:47
поделиться

joda-time - 1 вариант. на самом деле я предпочитаю эту библиотеку для всех манипуляций с датами. Я просматривал java 5 javadoc и нашел этот класс enum, который прост и полезен для вас. java.util.concurrent.TimeUnit. посмотрите на методы convert(...). http://download.oracle.com/docs/cd/E17476_01/javase/1.5.0/docs/api/java/util/concurrent/TimeUnit. html

1
ответ дан 6 December 2019 в 10:47
поделиться

Оригинальный способ: Версия Calendar (обновленная с предложениями в комментариях):

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = dateFormat.parse(string);
//Here you can do manually date.getHours()*3600+date.getMinutes*60+date.getSeconds();
//It's deprecated to use Date class though.
//Here it goes an original way to do it.
Calendar time = new GregorianCalendar();
time.setTime(date);
time.setTimeZone(TimeZone.getTimeZone("UTC"));
time.set(Calendar.YEAR,1970); //Epoc year
time.set(Calendar.MONTH,Calendar.JANUARY); //Epoc month
time.set(Calendar.DAY_OF_MONTH,1); //Epoc day of month
long seconds = time.getTimeInMillis()/1000L;

Отказ от ответственности: Я сделал это наизусть, просто посмотрев документацию, так что, возможно, есть опечатка или две.

3
ответ дан 6 December 2019 в 10:47
поделиться

Вот ссылка на Java-пример форматирования времени.

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/i18n/format/simpleDateFormat.html

0
ответ дан 6 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: