Получить данные от 4 часов назад

Как я могу вернуть объект Date на 4 часа меньше текущего системного времени в Java?

Ответ 1

Один из самых простых способов:

Date date = new Date(System.currentTimeMillis() - (4 * 60 * 60 * 1000));

Однако это не учитывает DST (переход на летнее время). Альтернативой является Calendar:

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
Date date = calendar.getTime();

Это, однако, довольно уродливый API. Альтернативой является JodaTime:

DateTime dateTime = new DateTime().minusHours(4);
Date date = dateTime.toDate(); // If you ever need this...

Ответ 2

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
calendar.getTime();

Ответ 3

Другие ответы верны, но я хотел бы внести современный ответ. В современном решении используется java.time современный API дат и времени Java.

Instant fourHoursAgo = Instant.now().minus(Duration.ofHours(4));
System.out.println(fourHoursAgo);

Это только что напечатано:

2018-01-31T15:22:21.113710Z

В конце Z указано, что время печатается в формате UTC - при нулевом сдвиге UTC, если вы это сделаете. Класс Instant является современной заменой Date, поэтому я рекомендую вам придерживаться этого. Современный API, как правило, гораздо удобнее работать с таким чище, настолько лучше разработан.

Обратите внимание на преимущества предоставления классу библиотеки вычитания для вас 4 часа: код становится более понятным и менее подвержен ошибкам. Никаких смешных констант, и никакие читатели не берут время, чтобы проверить, правильны ли они.

Если вам нужен старомодный объект Date, например, при использовании устаревшего API, который вы не можете изменить или не хотите изменять, выполните следующие действия:

Date oldfashionedDate = Date.from(fourHoursAgo);

Ссылка: Учебная тропа Oracle: время по времени. Конечно, есть и другие ресурсы в Интернете, пожалуйста, ищите.

Ответ 4

Преобразуйте его в миллисекунды, вычтите количество миллисекунд за 4 часа, преобразуйте его обратно в дату.

Ответ 5

Calendar c = Calendar.getInstance();
c.add(Calendar.HOUR_OF_DAY, -4);
java.util.Date d = c.getTime();
System.out.println(d);

Ответ 6

Calendar c =Calendar.getInstance() ;
c.add(Calendar.HOUR,-4);
Date d = c.getTime();