2017-01-24 9 views
2

Я получаю временную метку от приемника GPS и представлен во время микросекунд через несколько секунд:Преобразования микросекунды времени миллисекунды Времени

00:12:34.567891 

Java 7 и ниже только использовать время миллисекунды, так что я мог разделить строку и разделить микросекундную часть на миллисекунду, но это кажется смешным.

Java 8 работает с точностью до наносекунды, но если я использую DateTimeFormatter с рисунком «HH: mm: ss.nnnnnn», будет раздел после «.». следует рассматривать в терминах наносекунд?

По существу, как взять метку времени в микросекунду и преобразовать ее в общее количество миллисекунд.

+1

Java7 имеет ['TimeUnit.NANOSECONDS'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html#NANOSECONDS) ... и' System. nanoTime(); ' –

ответ

4

Это может помочь вам, по умолчанию, так как Java7

TimeUnit.NANOSECONDS.convert(567891, TimeUnit.MILLISECONDS); 

тщательно дать в качестве параметра время разобранное до тех пор ..

+0

Да, я надеялся, что вам не придется разделить штамп времени. Похоже, это должно быть проще. – Setix

+0

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

0

ТЛ; др

Duration.between( 
    LocalTime.MIN , 
    LocalTime.parse("00:12:34.567891") 
).toMillis() 

Смотрите эту code run live at IdeOne.com.

java.time

Ваш вклад делает не по всей видимости, является GPS метка времени. Вы должны определить и документировать объяснение источника данных.

Слово «временная метка» обычно означает точку на временной шкале, дату плюс время дня плюс часовой пояс (или смещение от-UTC). Напротив, ваш 00:12:34.567891 выглядит как промежуток времени, в частности двенадцать минут, тридцать четыре секунды и примерно на полсекунды больше (0,567891 секунд).

Предполагая, что у вас не будет ввода больше 24 часов, я предлагаю разбор в качестве объекта LocalTime.

String input = "00:12:34.567891" ; 
LocalTime lt = LocalTime.parse(input); 

Представляет промежуток времени, как Duration.

Duration d = Duration.between(LocalTime.MIN , lt) ; 

Сформировать строку, представляющую значение этого Duration в формате standard ISO 8601. В этом формате PnYnMnDTnHnMnS, где P отмечает начало, а T отделяет любую часть лет-месяцев-дней от любой части часов-минут-секунд.

PT12M34.567891S 

Кстати, ваше строковое значение ввода является плохим выбором формата для сериализации значения времени простоя. Используйте, по возможности, стандартный формат ISO 8601.

Кажется, что вы просите весь этот промежуток времени в миллисекундах. Помните, что это означает потерю данных, поскольку любые microseconds или nanoseconds во фракции секунды усекаются до milliseconds.

long millis = d.toMillis() ; // Consider entire span of time as milliseconds. 

См. Это code run live at IdeOne.com.


О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Где получить классы java.time?

  • Java SE 8, Java SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
  • Android

ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.

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