Добавление n часов в дату на Java?

Как добавить n часов к объекту Date? Я нашел еще один пример, используя дни в StackOverflow, но до сих пор не понимаю, как это сделать с часами.

Ответ 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

С Joda-Time

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();
}