Как добавить n часов к объекту Date? Я нашел еще один пример, используя дни в StackOverflow, но до сих пор не понимаю, как это сделать с часами.
Добавление n часов в дату на Java?
Ответ 1
Проверить класс календаря. Он имеет метод add
(и некоторые другие), чтобы позволить манипулировать временем. Что-то вроде этого должно работать.
Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(new Date()); // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour
cal.getTime(); // returns new date object, one hour in the future
Подробнее о API.
Ответ 2
Если вы используете Apache Commons/Lang, вы можете сделать это за один шаг, используя DateUtils.addHours()
:
Date newDate = DateUtils.addHours(oldDate, 3);
(Исходный объект не изменяется)
Ответ 3
Чтобы упростить пример @Christopher.
Скажите, что у вас есть константа
public static final long HOUR = 3600*1000; // in milli-seconds.
Вы можете написать.
Date newDate = new Date(oldDate.getTime() + 2 * HOUR);
Если вы используете long для хранения даты и времени вместо объекта Date, вы можете сделать
long newDate = oldDate + 2 * HOUR;
Ответ 4
ТЛ; др
myJavaUtilDate.toInstant()
.plusHours( 8 )
Или же…
myJavaUtilDate.toInstant() // Convert from legacy class to modern class, an 'Instant', a point on the timeline in UTC with resolution of nanoseconds.
.plus( // Do the math, adding a span of time to our moment, our 'Instant'.
Duration.ofHours( 8 ) // Specify a span of time unattached to the timeline.
) // Returns another 'Instant'. Using immutable objects creates a new instance while leaving the original intact.
Использование java.time
Среда java.time, встроенная в Java 8 и более поздние версии, вытесняет старые классы Java.util.Date/.Calendar. Эти старые классы, как известно, хлопотно. Избежать их.
Используйте метод toInstant
недавно добавленный в java.util.Date, чтобы преобразовать старый тип в новый тип java.time. Instant
- это момент времени на UTC с разрешением наносекунд.
Instant instant = myUtilDate.toInstant();
Вы можете добавить часы к этому Instant
, передав значение TemporalAmount
например, Duration
.
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
Чтобы прочитать эту дату и время, сгенерируйте строку в стандартном формате ISO 8601, вызвав toString
.
String output = instantHourLater.toString();
Возможно, вы захотите увидеть этот момент через призму часов некоторых регионов. Настройте Instant
в желаемый/ожидаемый часовой пояс, создав ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Кроме того, вы можете позвонить на plusHours
чтобы добавить количество часов. Зональность означает переход на летнее время (DST) и другие аномалии, которые будут обрабатываться от вашего имени.
ZonedDateTime later = zdt.plusHours( 8 );
Вы должны избегать использования старых классов даты и времени, включая java.util.Date
и .Calendar
. Но если вам действительно нужен java.util.Date
для взаимодействия с классами, еще не обновленными для типов java.time, конвертируйте из ZonedDateTime
через Instant
. Новые методы, добавленные к старым классам, облегчают преобразование в/из типов java.time.
java.util.Date date = java.util.Date.from( later.toInstant() );
Дополнительную информацию о преобразовании см. В моем ответе на вопрос " Преобразовать java.util.Date" в какой тип "java.time"? ,
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытеснять неприятные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.
Чтобы узнать больше, смотрите Oracle Tutorial. И поиск для многих примеров и объяснений. Спецификация JSR 310.
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
.
Где взять классы java.time?
- Java SE 8, Java SE 9 и более поздние
- Встроенный.
- Часть стандартного Java API со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport.
- Android
- Более поздние версии Android связывают реализации классов java.time.
- Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянуто выше). Смотрите Как использовать ThreeTenABP….
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и другие.
Ответ 5
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
Ответ 6
Так как Java 8:
LocalDateTime.now().minusHours(1);
См. LocalDateTime
API.
Ответ 7
Что-то вроде:
Date oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() +
(2L * hoursInMillis)); // Adds 2 hours
Ответ 8
Используя новый класс java.util.concurrent.TimeUnit, вы можете сделать это следующим образом
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours
Ответ 9
Это еще один фрагмент кода, когда ваш объект Date
находится в формате Datetime. Красота этого кода: если вы дадите больше часов, дата также будет обновляться соответствующим образом.
String myString = "09:00 12/12/2014";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy");
Date myDateTime = null;
//Parse your string to SimpleDateFormat
try
{
myDateTime = simpleDateFormat.parse(myString);
}
catch (ParseException e)
{
e.printStackTrace();
}
System.out.println("This is the Actual Date:"+myDateTime);
Calendar cal = new GregorianCalendar();
cal.setTime(myDateTime);
//Adding 21 Hours to your Date
cal.add(Calendar.HOUR_OF_DAY, 21);
System.out.println("This is Hours Added Date:"+cal.getTime());
Вот результат:
This is the Actual Date:Fri Dec 12 09:00:00 EST 2014
This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014
Ответ 10
Date argDate = new Date(); //set your date.
String argTime = "09:00"; //9 AM - 24 hour format :- Set your time.
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
String dateTime = sdf.format(argDate) + " " + argTime;
Date requiredDate = dateFormat.parse(dateTime);
Ответ 11
Вы можете сделать это с помощью API Joda DateTime
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
Ответ 12
Если вы хотите использовать java.time
, здесь можно добавить длительность форматирования ISO 8601:
import java.time.Duration;
import java.time.LocalDateTime;
...
LocalDateTime yourDate = ...
...
// Adds 1 hour to your date.
yourDate = yourDate.plus(Duration.parse("PT1H")); // Java.
// OR
yourDate = yourDate + Duration.parse("PT1H"); // Groovy.
Ответ 13
используя классы Java 8. мы можем легко и легко манипулировать датой и временем, как показано ниже.
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
Ответ 14
Вы можете использовать класс LocalDateTime из Java 8. Например:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
Ответ 15
В Котлине:
fun main(args: Array<String>) {
val current = LocalDateTime.now()
println("Current Date and Time is: $current")
val future = current.plusHours(5)
println("Future Date and Time is: $future")
}
Выход:
Current Date and Time is: 2019-03-28T10:40:41.448
Future Date and Time is: 2019-03-28T15:40:41.448
Ответ 16
Вы можете использовать этот метод, его легко понять и реализовать:
public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, nombreHeure);
calendar.add(Calendar.MINUTE, nombreMinute);
calendar.add(Calendar.SECOND, nombreSeconde);
return calendar.getTime();
}