У меня есть класс Фильм в нем, у меня есть дата начала, продолжительность и Дата остановки. Запустите и остановитесь, Дата Объекты Даты (частная Дата startDate...) (Это - присвоение, таким образом, я не могу изменить это), теперь, я хочу автоматически вычислить stopDate путем добавления продолжительности (в минуту) к startDate.
Моим знанием, работающим с функциями управления времени Даты, удерживается от использования следовательно плохая практика, но с другой стороны я не вижу способа преобразовать объект Даты в календарный объект, чтобы управлять временем и повторно преобразовать его в объект Даты. Существует ли путь? И если существует то, что было бы лучшей практикой
Что вы можете сделать, так это создать экземпляр GregorianCalendar
, а затем установить Дата
в качестве времени начала:
Date date;
Calendar myCal = new GregorianCalendar();
myCal.setTime(date);
Однако другой подход - не использовать Дата
у всех. Вы можете использовать такой подход:
private Calendar startTime;
private long duration;
private long startNanos; //Nano-second precision, could be less precise
...
this.startTime = Calendar.getInstance();
this.duration = 0;
this.startNanos = System.nanoTime();
public void setEndTime() {
this.duration = System.nanoTime() - this.startNanos;
}
public Calendar getStartTime() {
return this.startTime;
}
public long getDuration() {
return this.duration;
}
Таким образом, вы можете получить доступ как к времени начала, так и к продолжительности от начала до конца. Точность, конечно, зависит от вас.
Calendar tCalendar = Calendar.getInstance();
tCalendar.setTime(date);
дата является объектом java.util.Date. Вы также можете использовать Calendar.getInstance () для получения экземпляра Calendar (гораздо более эффективно).
Часто бывает полезно посмотреть на подпись и описание методов API, а не только на их имя :) - Даже в Стандартный API Java, имена иногда могут вводить в заблуждение.
Для этого не нужно преобразовывать в Календарь
, вы можете просто использовать getTime ()
/ setTime ()
взамен.
getTime ()
: Возвращает количество миллисекунд с 1 января 1970 г., 00:00:00 по Гринвичу, представленное этим объектом Date.
setTime (long time)
: Устанавливает этот объект Date так, чтобы он представлял момент времени в миллисекундах после 1 января 1970 г. 00:00:00 по Гринвичу. )
В секунде 1000 миллисекунд, а в минуте - 60 секунд. Просто посчитайте.
Date now = new Date();
Date oneMinuteInFuture = new Date(now.getTime() + 1000L * 60);
System.out.println(now);
System.out.println(oneMinuteInFuture);
Суффикс L
в 1000
означает, что это длинный
литерал; эти вычисления обычно легко переполняются int
.
что-то вроде
movie.setStopDate(movie.getStartDate() + movie.getDurationInMinutes()* 60000);