Изменение даты Java на один час назад
у меня есть объект Date в Java:
Date currentDate = new Date();
Это даст текущую дату и время. Пример:
Thu Jan 12 10:17:47 GMT 2012
вместо этого я хочу получить дату, изменив ее на один час назад, чтобы она дала мне:
Thu Jan 12 09:17:47 GMT 2012
что было бы лучшим способом сделать это?
9 ответов:
java.утиль.Календарь
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.утиль.Дата
new Date(System.currentTimeMillis() - 3600 * 1000);орг.Джода.время.LocalDateTime
new LocalDateTime().minusHours(1)Java 8: java.время.LocalDateTime
LocalDateTime.now().minusHours(1)Java 8 java.время.Мгновенный
// 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));
похоже на решение @ Sumit Jain
Date currentDate = new Date(System.currentTimeMillis() - 3600 * 1000);или
Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1));
tl; dr
на UTC:
Instant.now().minus( 1 , ChronoUnit.HOURS )или, зонирована:
Instant.now() .atZone( ZoneId.of ( "America/Montreal" ) ) .minusHours( 1 )использование java.время
Java 8 и позже новый java.время встроенный фреймворк.
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.921 Z | instantHourEarlier: 2015-10-28T23: 37: 48.921 Z
обратите внимание, как в этот момент произошло, чтобы вернуться к вчерашней дате.
ZonedDateTimeесли вы заботитесь о часовом поясе, используйте
ZonedDateTimeкласса. Вы можете начать с мгновенного и назначить часовой пояс, aZoneId, теперь режим обслуживания, советует миграцию на java.время.чтобы узнать больше, смотрите Oracle Tutorial. Поиск переполнения стека для многих примеров и объяснений.
большая часть java.функциональность time обратно портирована на Java 6 & 7 в ThreeTen-Backport и далее адаптируется к Android на ThreeTenABP (см. как использовать...).
The ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательным полигоном для возможных будущих дополнений к java.время. Вы можете найти некоторые полезные классы, такие как
Interval,YearWeek,YearQuarterи многое другое.
использовать календарь.
Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) - 1);
или с помощью известных Джода Времени библиотека:
DateTime dateTime = new DateTime(); dateTime = dateTime.minusHours(1); Date modifiedDate = dateTime.toDate();
просто вычтите количество миллисекунд в час от даты.
currentDate.setTime(currentDate.getTime() - 3600 * 1000));
вы можете использовать код ниже для даты и времени :
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");
Это может быть достигнуто с помощью
java.util.Date. Следующий код вычитает 1 час от вашей даты.Date date = new Date(yourdate in date format); Date newDate = DateUtils.addHours(date, -1)аналогично для вычитания 20 секунд от дата
newDate = DateUtils.addSeconds(date, -20)
получить время в миллисекундах, минус ваши минуты в миллисекундах и конвертировать его в дату. Здесь вам нужно объективировать один!!!
int minutes = 60; long currentDateTime = System.currentTimeMillis(); Date currentDate = new Date(currentDateTime - minutes*60*1000); System.out.println(currentDate);
Comments