ТЛ; др
Instant stop =
myUtilDateStart.toInstant()
.plus( Duration.ofMinutes( x ) )
;
java.time
Другие ответы верны, особенно Ответ Боргвардта . Но эти Ответы используют устаревшие классы наследства.
Оригинальные классы даты и времени, связанные с Java, были заменены классами java.time. Выполните свою бизнес-логику в типах java.time. Преобразовывать в старые типы только в тех случаях, когда необходимо работать со старым кодом, который еще не обновлен для обработки типов java.time.
Если ваш Calendar
на самом деле GregorianCalendar
, вы можете конвертировать в ZonedDateTime
. Найдите новые методы, добавленные к старым классам, чтобы облегчить преобразование в / из типов java.time.
if( myUtilCalendar instanceof GregorianCalendar ) {
GregorianCalendar gregCal = (GregorianCalendar) myUtilCalendar; // Downcasting from the interface to the concrete class.
ZonedDateTime zdt = gregCal.toZonedDateTime(); // Create `ZonedDateTime` with same time zone info found in the `GregorianCalendar`
end if
Если ваш Calendar
не является Gregorian
, позвоните toInstant
, чтобы получить Instant
объект. Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд .
Instant instant = myCal.toInstant();
Аналогично, если вы начинаете с java.util.Date
объекта, преобразуйте его в Instant
. Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичной дроби).
Instant instant = myUtilDate.toInstant();
Применить часовой пояс, чтобы получить ZonedDateTime
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
Чтобы получить java.util.Date
объект, пройдите через Instant
.
java.util.Date utilDate = java.util.Date.from( zdt.toInstant() );
Для более подробного обсуждения преобразования между устаревшими типами даты и времени и java.time и изящной диаграммой см. мой ответ на другой вопрос.
Duration
Представляет промежуток времени как объект Duration
. Ваш ввод для продолжительности составляет количество минут, как указано в вопросе.
Duration d = Duration.ofMinutes( yourMinutesGoHere );
Вы можете добавить это к началу, чтобы определить остановку.
Instant stop = startInstant.plus( d );
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые старые классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
Проект Joda-Time , в настоящее время находящийся в режиме обслуживания , рекомендует выполнить переход на java.time.
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где получить классы java.time?
- Java SE 8 и SE 9 и более поздние
- Встроенный.
- Часть стандартного Java API со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Android
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .