В настоящее время у меня есть объект Date, представляющий время. Как бы добавить 5 минут к этому объекту?
Как выполнить арифметику календаря с помощью java.util.Date?
Ответ 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 ) ;