Подтвердить что ты не робот

Как выполнить арифметику календаря с помощью java.util.Date?

В настоящее время у меня есть объект Date, представляющий время. Как бы добавить 5 минут к этому объекту?

4b9b3361

Ответ 1

Вы можете использовать Calendar, что упростит добавление любого времени:

Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MINUTE, 5);
Date newDate = cal.getTime();

В вашем случае вы можете просто добавить время в миллисекундах, например:

Date newDate = new Date(date.getTime() + 5 * 60 * 1000L);

Ответ 2

Рассмотрите возможность использования Joda-Time. Это библиотека, которая делает обработку даты и времени намного приятнее, чем встроенные.

Класс DateTime предлагает plusMinutes.

DateTime now = DateTime.now( DateTimeZone.forID( "America/Montreal" ) );
DateTime inFiveMinutes = now.plusMinutes( 5 );

Ответ 3

Дата имеет время в миллисекундах. Однако вы можете найти, что использование long проще для такого типа вычислений.

Date date1 = new Date();
long time1 = date1.getTime();
long time2 = time1 + 5 * 60 * 1000;
Date date2 = new Date(time2);

Если вы используете простой long, вы можете удалить строки с помощью объектов Date.

Ответ 4

С Java 8 появляются новые параметры. На самом деле Joda Time рекомендует как можно скорее перейти к API Java 8 Дата и время. Ниже приведен пример добавления времени по этой ссылке:

https://docs.oracle.com/javase/tutorial/datetime/iso/period.html

Следующий код добавляет 5 минут к текущему времени:

LocalDateTime now = LocalDateTime.now();
now = now.plusMinutes(5);
System.out.println(now);

Ответ 5

В Java 7 вы можете использовать класс DateUtils из Apache Commons:

Date dateWithFiveMinutesAdded = DateUtils.addMinutes(date, 5);

или Joda-Time Библиотека:

Date dateWithFiveMinutesAdded = new DateTime(date).plusMinutes(5).toDate();

Если вы используете Java 8 и не хотите использовать какие-либо внешние библиотеки, рассмотрите новый встроенный API Java/Дата/время Java 8:

Date dateWithFiveMinutesAdded = Date.from(date.toInstant().plus(5, ChronoUnit.MINUTES));

или, альтернативно:

Date dateWithFiveMinutesAdded = Date.from(date.toInstant().plusSeconds(5 * 60));

Однако с Java 8 вы должны использовать скорее Instant, ZonedDateTime или LocalDateTime вместо Date.

Очевидно, есть еще много способов сделать это, но, на мой взгляд, они довольно чисты и компактны, когда дело доходит до ясности кода.

Ответ 6

TL;DR

myDate.toInstant()
      .plus( 5 , ChronoUnit.MINUTES )

Вы не

Класс Date является частью неприятных старых классов дат, которые больше не должны использоваться. Они вытесняются классами java.time.

Instant

Преобразуйте Date в Instant, используя новый метод, добавленный в старый класс. Оба представляют момент на временной шкале в UTC, но новый класс имеет более тонкое разрешение наносекунд.

Instant instant = myDate.toInstant() ;

Добавление пяти минут легко.

Instant later = instant.plus( 5 , ChronoUnit.MINUTES ) ;

Или используйте Duration.

Duration d = Duration.ofMinutes( 5 ) ;
Instant later = instant.plus( d ) ;