Объект даты к Календарю [Java]

У меня есть класс Фильм в нем, у меня есть дата начала, продолжительность и Дата остановки. Запустите и остановитесь, Дата Объекты Даты (частная Дата startDate...) (Это - присвоение, таким образом, я не могу изменить это), теперь, я хочу автоматически вычислить stopDate путем добавления продолжительности (в минуту) к startDate.

Моим знанием, работающим с функциями управления времени Даты, удерживается от использования следовательно плохая практика, но с другой стороны я не вижу способа преобразовать объект Даты в календарный объект, чтобы управлять временем и повторно преобразовать его в объект Даты. Существует ли путь? И если существует то, что было бы лучшей практикой

67
задан Suragch 29 August 2017 в 05:52
поделиться

5 ответов

Что вы можете сделать, так это создать экземпляр 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;
}

Таким образом, вы можете получить доступ как к времени начала, так и к продолжительности от начала до конца. Точность, конечно, зависит от вас.

96
ответ дан 24 November 2019 в 14:35
поделиться
Calendar tCalendar = Calendar.getInstance();
tCalendar.setTime(date);

дата является объектом java.util.Date. Вы также можете использовать Calendar.getInstance () для получения экземпляра Calendar (гораздо более эффективно).

27
ответ дан 24 November 2019 в 14:35
поделиться

Calendar.setTime ()

Часто бывает полезно посмотреть на подпись и описание методов API, а не только на их имя :) - Даже в Стандартный API Java, имена иногда могут вводить в заблуждение.

6
ответ дан 24 November 2019 в 14:35
поделиться

Для этого не нужно преобразовывать в Календарь , вы можете просто использовать 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 .

6
ответ дан 24 November 2019 в 14:35
поделиться

что-то вроде

movie.setStopDate(movie.getStartDate() + movie.getDurationInMinutes()* 60000);
0
ответ дан 24 November 2019 в 14:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: