Ответы:
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));
Подобно решению @Sumit Jain
Date currentDate = new Date(System.currentTimeMillis() - 3600 * 1000);
или
Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1));
Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(10));
Это должно быть на 10 минут позже ?
В UTC :
Instant.now().minus( 1 , ChronoUnit.HOURS )
Или зонированные:
Instant.now()
.atZone( ZoneId.of ( "America/Montreal" ) )
.minusHours( 1 )
В 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 | InstantHourРанее: 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 [Америка / Монреаль]
zdtHourРанее: 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 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в java.sql.*
занятиях.
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval
, YearWeek
, YearQuarter
, и более .
Или используя знаменитую библиотеку Joda Time :
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");
Получите время в миллисекундах, минус ваши минуты в миллисекундах и преобразуйте его в дату. Здесь нужно объективировать одного !!!
int minutes = 60;
long currentDateTime = System.currentTimeMillis();
Date currentDate = new Date(currentDateTime - minutes*60*1000);
System.out.println(currentDate);
У меня это сработало вместо формата. Для работы со временем просто используйте методы parse и toString ()
Строка localTime = "6:11"; LocalTime localTime = LocalTime.parse (местное время)
LocalTime lt = 6:11; localTime = lt.toString ()
mktime
эквивалент в Java? вычесть из него 60 минут?