Как мне добавить n часов к объекту даты? Я нашел другой пример с использованием days в StackOverflow, но все еще не понимаю, как это сделать с hours .
Переведено автоматически
Ответ 1
Проверьте Calendar класс. У него есть add метод (и некоторые другие), позволяющий манипулировать временем.
Что-то вроде этого должно сработать:
Calendarcal= Calendar.getInstance(); // creates calendar cal.setTime(newDate()); // sets calendar time/date cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour cal.getTime(); // returns new date object plus one hour
Проверьте API для получения дополнительной информации.
Если вы используете long для хранения даты / времени вместо объекта Date, вы можете сделать
longnewDate= oldDate + 2 * HOUR;
Ответ 4
tl; dr
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. An Instant - это момент на временной шкале в UTC с разрешением в наносекунды.
Instantinstant= myUtilDate.toInstant();
Вы можете добавить к ней количество часов, Instant передав TemporalAmount например Duration.
Чтобы прочитать эту дату-время, сгенерируйте строку в стандартном формате ISO 8601, вызвав toString.
Stringoutput= instantHourLater.toString();
Возможно, вы захотите увидеть этот момент через призму времени на настенных часах в каком-либо регионе. Отрегулируйте время Instant в соответствии с вашим желаемым / ожидаемым часовым поясом, создав ZonedDateTime.
В качестве альтернативы вы можете позвонитьplusHours, чтобы добавить количество часов. Зонирование означает, что переход на летнее время (DST) и другие аномалии будут обрабатываться от вашего имени.
ZonedDateTimelater= zdt.plusHours( 8 );
Вам следует избегать использования старых классов даты и времени, включая java.util.Date и .Calendar. Но если вам действительно нужен java.util.Date для взаимодействия с классами, которые еще не обновлены для типов java.time, преобразуйте из ZonedDateTime через Instant. Новые методы, добавленные в старые классы, облегчают преобразование в / из типов java.time.
Чтобы узнать больше, ознакомьтесь с Руководством по Oracle. И найдите в Stack Overflow множество примеров и пояснений. Спецификация - JSR 310.
Вы можете обмениваться объектами java.time непосредственно со своей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классах.
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательным полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и больше.