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

Изменение даты Java на один час назад

У меня есть объект даты Java:

Date currentDate = new Date();

Это даст текущую дату и время. Пример:

Thu Jan 12 10:17:47 GMT 2012

Вместо этого я хочу получить дату, изменив ее на один час назад, чтобы он дал мне:

Thu Jan 12 09:17:47 GMT 2012

Каким будет лучший способ сделать это?

4b9b3361

Ответ 1

java.util.Calendar

Calendar cal = Calendar.getInstance();
// remove next line if you're always using the current time.
cal.setTime(currentDate);
cal.add(Calendar.HOUR, -1);
Date oneHourBack = cal.getTime();

java.util.Date

new Date(System.currentTimeMillis() - 3600 * 1000);

org.joda.time.LocalDateTime

new LocalDateTime().minusHours(1)

Java 8: java.time.LocalDateTime

LocalDateTime.now().minusHours(1)

Java 8 java.time.Instant

// always in UTC if not timezone set
Instant.now().minus(1, ChronoUnit.HOURS));
// with timezone, Europe/Berlin for example
Instant.now()
       .atZone(ZoneId.of("Europe/Berlin"))
       .minusHours(1));

Ответ 2

Аналогично решению @Sumit Jain

Date currentDate = new Date(System.currentTimeMillis() - 3600 * 1000);

или

Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1));

Ответ 3

ТЛ; др

В UTC:

Instant.now().minus( 1 , ChronoUnit.HOURS ) 

Или зонированные:

Instant.now()
       .atZone( ZoneId.of ( "America/Montreal" ) )
       .minusHours( 1 )

Использование java.time

Java 8 и более поздние версии имеют новую встроенную инфраструктуру java.time.

Instant

Если вас интересует только UTC (GMT), используйте класс Instant.

Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );

Дамп на консоль.

System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );

мгновенный: 2015-10-29T00: 37: 48.921Z | InstantHourEarlier: 2015-10-28T23: 37: 48.921Z

Обратите внимание, как в этот момент произошло возвращение к вчерашней дате.

ZonedDateTime

Если вы заботитесь о часовом поясе, используйте класс ZonedDateTime. Вы можете начать с Instant и назначить часовой пояс, объект ZoneId. Этот класс обрабатывает необходимые корректировки для аномалий, таких как летнее время (DST).

Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );

Дамп на консоль.

System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );

мгновенный: 2015-10-29T00: 50: 30.778Z

zdt: 2015-10-28T20: 50: 30.778-04: 00 [Америка/Монреаль]

zdtHourEarlier: 2015-10-28T19: 50: 30.778-04: 00 [Америка/Монреаль]

преобразование

Старые классы java.util.Date/.Calendar теперь устарели. Избежать их. Они общеизвестно хлопотны и сбивают с толку.

Когда вы должны использовать старые классы для работы со старым кодом, еще не обновленным для типов java.time, вызовите методы преобразования. Вот пример кода, переходящего из Instant или ZonedDateTime в java.util.Date.

java.util.Date date = java.util.Date.from( instant );

…или же…

java.util.Date date = java.util.Date.from( zdt.toInstant() );

О 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?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и другие.

Ответ 4

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

Calendar cal = Calendar.getInstance();

cal.setTime(new Date());
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) - 1);

Ответ 5

Или используя знаменитую библиотеку Joda Time:

DateTime dateTime = new DateTime();
dateTime = dateTime.minusHours(1);
Date modifiedDate = dateTime.toDate();

Ответ 6

Просто вычтите количество миллисекунд за час до даты.

currentDate.setTime(currentDate.getTime() - 3600 * 1000));

Ответ 7

Вы можете использовать следующий код для даты и времени:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
       //get current date time with Calendar()
       Calendar cal = Calendar.getInstance();
       System.out.println("Current Date Time : " + dateFormat.format(cal.getTime()));

       cal.add(Calendar.DATE, 1);
       System.out.println("Add one day to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MONTH, 1);
       System.out.println("Add one month to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.YEAR, 1);
       System.out.println("Add one year to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.HOUR, 1);
       System.out.println("Add one hour to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MINUTE, 1);
       System.out.println("Add one minute to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.SECOND, 1);
       System.out.println("Add one second to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.DATE, -1);
       System.out.println("Subtract one day from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MONTH, -1);
       System.out.println("Subtract one month from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.YEAR, -1);
       System.out.println("Subtract one year from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.HOUR, -1);
       System.out.println("Subtract one hour from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MINUTE, -1);
       System.out.println("Subtract one minute from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.SECOND, -1);
       System.out.println("Subtract one second from current date : " + dateFormat.format(cal.getTime()));

Выход:

Current Date Time : 2008/12/28 10:24:53
Add one day to current date : 2008/12/29 10:24:53
Add one month to current date : 2009/01/28 10:24:53
Add one year to current date : 2009/12/28 10:24:53
Add one hour to current date : 2008/12/28 11:24:53
Add one minute to current date : 2008/12/28 10:25:53
Add one second to current date : 2008/12/28 10:24:54
Subtract one day from current date : 2008/12/27 10:24:53
Subtract one month from current date : 2008/11/28 10:24:53
Subtract one year from current date : 2007/12/28 10:24:53
Subtract one hour from current date : 2008/12/28 09:24:53
Subtract one minute from current date : 2008/12/28 10:23:53
Subtract one second from current date : 2008/12/28 10:24:52

Эта ссылка хорошая: Смотрите здесь

И посмотрите: См. также

И: Здесь

И: Здесь

И: Здесь

Если вам нужно просто время:

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

Ответ 8

Это может быть достигнуто с помощью java.util.Date. Следующий код вычитает 1 час с вашей даты.

Date date = new Date(yourdate in date format);
Date newDate = DateUtils.addHours(date, -1)

Аналогично для вычитания 20 секунд с вашей даты

newDate = DateUtils.addSeconds(date, -20)    

Ответ 9

Это сработало для меня вместо использования формата. Для работы со временем просто используйте методы parse и toString()

String localTime = "6:11"; LocalTime localTime = LocalTime.parse (местное время)

LocalTime lt = 6:11; localTime = lt.toString()

Ответ 10

Получите время в миллисекундах, минус минуты в миллисекундах и преобразуйте его в Date. Здесь вам нужно объективировать один!!!

    int minutes = 60;
    long currentDateTime = System.currentTimeMillis();
    Date currentDate = new Date(currentDateTime - minutes*60*1000);
    System.out.println(currentDate);