tl; д-р
Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
Java 9 і пізніших версій
У Java 9 та пізніших версіях створіть a Durationта викликайте to…Partметоди. У цьому випадку: toMinutesPartі toSecondsPart.
Зафіксуйте старт і зупинку секундоміра.
Instant start = Instant.now();
…
Instant stop = Instant.now();
Представляють минулий час в Durationоб’єкті.
Duration d = Duration.between( start , stop );
Допитуйте кожну частину, хвилини та секунди.
int minutes = d.toMinutesPart();
int seconds = d.toSecondsPart();
Ви також можете побачити, чи тривав ваш секундомір очікувано довго.
Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;
Java 8
У Java 8 у Durationкласі відсутні to…Partметоди. Вам потрібно буде робити математику, як показано в інших відповідях.
long entireDurationAsSeconds = d.getSeconds();
Або нехай Durationзаймаються математикою.
long minutesPart = d.toMinutes();
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;
Дивіться живий код на IdeOne.com .
Інтервал: 2016-12-18T08: 39: 34.099Z / 2016-12-18T08: 41: 49.099Z
d.toString (): PT2M15S
d.getSeconds (): 135
Минуло: 2М 15С
Дозвіл
FYI, роздільна здатність nowметодів змінилася між Java 8 і Java 9. Дивіться це запитання .
- Java 9 фіксує момент з роздільною здатністю, такою ж, як наносекунди. Роздільна здатність залежить від можливостей обладнання вашого комп’ютера. Я бачу мікросекунди (шість цифр десяткового дробу) на MacBook Pro Retina з macOS Sierra.
- Java 8 фіксує момент лише до мілісекунд. Реалізація
Clockобмежена роздільною здатністю мілісекунд. Таким чином, ви можете зберігати значення в наносекундах, але фіксувати їх лише в мілісекундах.
Про java.time
Java.time каркас вбудований в Java 8 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date, Calendar, і SimpleDateFormat.
Щоб дізнатись більше, див. Підручник Oracle . І шукайте в Stack Overflow багато прикладів та пояснень. Специфікація - JSR 310 .
Проект Joda-Time , який зараз перебуває в режимі обслуговування , радить перейти на класи java.time .
Ви можете обмінювати об'єкти java.time безпосередньо з базою даних. Використовуйте драйвер JDBC, сумісний з JDBC 4.2 або новішою. Не потрібні рядки, не потрібні java.sql.*класи.
Де отримати класи java.time?
