Т.Л., д-р
Duration.between(
LocalTime.of(12 , 5 , 0) ,
LocalTime.of(12 , 7 , 0)
).toString()
PT2M
Если против моей настоятельной рекомендации для использования Duration
, вы настаиваете на использовании неоднозначное/запутанным время-день форматирования:
LocalTime.MIN.plus(
Duration.between(
LocalTime.of(12 , 5 , 0) ,
LocalTime.of(12 , 7 , 0)
)
).toString();
00:02
Чтобы закрепить все три компонента (часы, минуты, секунды), используйте предопределенные DateTimeFormatter.ISO_LOCAL_TIME
.
LocalTime.MIN.plus(
Duration.between(
LocalTime.of(12 , 5 , 0) ,
LocalTime.of(12 , 7 , 0)
)
).format(DateTimeFormatter.ISO_LOCAL_TIME)
00:02:00
См live code in IdeOne.com.
Момент! = Пролет от времени
Не злоупотреблять даты и время занятия, такие как java.util.Date
хранить истекшее время. Такой класс представляет собой момент, а не промежуток времени.
Избегайте унаследованное даты и время занятия
Не используйте проблемные старые классы даты и время, такие как java.util.Date
. Теперь они вытесняются классами java.time.
Instant
Instant
класс представляет собой момент на временной шкале в UTC с разрешением nanoseconds.
Получить текущий момент.
Instant now = Instant.now();
Имитировать позднее.
Instant future = now.plus(Duration.ofMinutes(5));
Duration
Capture время, прошедшее с Duration
или Period
объекта. Каждый из них представляет собой промежуток времени, первый обрабатывает дни-часы-минуты-секунды, а второй обрабатывает годы-месяцы-дни.
Duration duration = Duration.between(now , future);
Формат строки
Чтобы представить, что значение длительности в виде строки, не использовать время- день форматирования, как неоднозначна. Вместо этого используйте стандарт ISO 8601 format for durations. Этот формат, PnYnMnDTnHnMnS
, отмечает начало с P
. T
в середине разделяет часть лет-месяцев-дней с части часов-минут-секунд. Например, два с половиной часа - PT2H30M
. Наш пример здесь пять минут: PT5M
.
String output = duration.toString(); // PT5M
LocalTime
Если у вас есть фактический день времени-и хотите форматировать с заполнением нулями, формат по умолчанию LocalTime::toString
.
LocalTime.now(ZoneId.of("America/Montreal")).toString(); // 02:03:04.789Z
Другой пример. Опять же, я не рекомендую злоупотреблять LocalTime
таким образом. (Вместо этого, придерживайтесь Duration
за истекшее время.)
LocalTime start = LocalTime.now(ZoneId.of("America/Montreal"));
LocalTime stop = start.plusMinutes(7);
Duration d = Duration.between(start , stop);
LocalTime result = LocalTime.MIN.plus(d); // I do *not* recommend abusing `LocalTime` this way. Use `Duration` instead for elapsed time.
DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_TIME ;
String output = result.format(f);
System.out.println("output: " + output);
выход: 00:07:00
См live code in 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 и SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
Фактическая проблема заключалась в том, что час будет отображаться как 09, а не 00. – pilcrowpipe
Вместо того, чтобы показывать прошедшее время как время дня (неоднозначное и запутанное), используйте стандартную [продолжительность ISO 8601] (https: // en .wikipedia.org/wiki/ISO_8601 # Durations) формата 'PnYnMnDTnHnMnS', например' PT4S', в течение четырех секунд. –