Количество секунд в «ЧЧ: ММ: СС» - PullRequest
7 голосов
/ 08 июля 2010

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

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

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

Спасибо!

Ответы [ 4 ]

14 голосов
/ 09 июля 2010

На основе 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;

reference используется для компенсации различных часовых поясов, и нет проблем с переходом на летнее время, поскольку 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 ...

3 голосов
/ 08 июля 2010

Оригинальный способ: 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;

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

1 голос
/ 08 июля 2010

йода-время составляет 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

0 голосов
/ 08 июля 2010

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

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

...