2013-05-27 2 views
3

Я делаю базовую программу Java, которая читает в файле субтитров (.srt), и я хотел бы хранить каждый раз как объект Date. Мне действительно нужно отслеживать часы, минуты, секунды и миллисекунды (до 3 цифр). Я думаю, что я могу хранить его с помощью этого:Как хранить и извлекать миллисекунды в объекте даты в Java?

String start = "00:01:01,604"; 
DateFormat sdf = new SimpleDateFormat("hh:mm:ss,SSS"); 
Date startDate = sdf.parse(start); 

Для извлечения, я могу сделать что-то вроде этого:

return String.format("\nStart: %d:%d:%dText: %s\n", startDate.getHours(),startDate.getMinutes(), startDate.getSeconds(), text); 

Я ищу что-то, что бы сделать что-то похожее на getMilliseconds (если он существовал). Большое спасибо!

ответ

3

Рекомендуемый способ доступа к части даты (часы, минуты и т. Д.) В Java теперь использует Calendar.get(Calendar.MILISECONDS), см. javadocs. В случае вашего кода это будет выглядеть так:

Date startDate = sdf.parse(start); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTime(startDate); 
int milliseconds = calendar.get(Calendar.MILISECONDS); 

P.S. Обратите внимание, что в отношении javadocsDate.getHours(), Date.getSeconds() и т. Д. Методы в настоящее время устарели. Не используйте их :).

+0

Это именно то, что я искал. Спасибо! – Yesha

1

Просто позвоните date.getTime() и получите миллисекунды.

+1

getTime() возвращает миллисекунды с начала эпохи. OP хочет миллисекунды с последней полной секунды. –

+2

Как правило, использование 'Date' для этого неверно. Вы либо захотите использовать простой «длинный» или выделенный класс продолжительности (например, [от Joda Time] (http://joda-time.sourceforge.net/key_duration.html)). –

5

Что вы делаете, это не дата! Не используйте класс Date для его обработки! Даты имеют странные дополнительные правила, которые вас не волнуют, и это может легко вас поднять (просто подумайте о високосных годах, прыжках и часовых поясах).

Вы должны либо

  • использовать long держать миллисекунды и обрабатывать вычисления самостоятельно (это не так трудно, вы не реализует календарь) или
  • использования существующий класс продолжительности, такой как the one from Joda Time.
+1

+1 - ** Это правильный ответ. –

+0

+1 umm .... правый ... –

1

Вы всегда можете использовать Date.getTime() для получения значения в миллисекундах. Он вернет значение в длинном формате

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