Как я могу вернуть объект Date на 4 часа меньше, чем текущее системное время в Java?Дата получения от 4 часов назад
ответ
Один из самых простых способов:
Date date = new Date(System.currentTimeMillis() - (4 * 60 * 60 * 1000));
Это, однако, не принимает во внимание DST (Daylight Saving Time). Альтернатива 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...
Преобразовать его в миллисекундах, вычесть количество миллисекунд в течение 4 часов, преобразовать его обратно в Date.
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
calendar.getTime();
Calendar c =Calendar.getInstance() ;
c.add(Calendar.HOUR,-4);
Date d = c.getTime();
Используйте Calendar
объект и метод add
.
calendar.add(Calendar.HOUR, -4);
См http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html
Calendar c = Calendar.getInstance();
c.add(Calendar.HOUR_OF_DAY, -4);
java.util.Date d = c.getTime();
System.out.println(d);
Другие ответы правильны, но я хотел бы внести свой вклад в современный ответ. В современном решении используется 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 Tutorial trail: Date Time. Конечно, есть и другие ресурсы в Интернете, пожалуйста, ищите.
- 1. Дата получения 900 дней назад
- 2. Дата получения 3 дней назад
- 3. Дата получения от миллисекунд
- 4. laravel 4 валидация после: дата - дата получения от базы данных
- 5. Дата получения от JSONObject
- 6. Дата получения от NSNumber
- 7. Дата получения от Jtextfield Дата добавления
- 8. Дата получения от colum mysql
- 9. Дата получения от JQueryUI Datepicker
- 10. span текущая дата время от 6 часов
- 11. контрольная дата в диапазоне от 24 часов
- 12. Дата проверки от mongo более 24 часов
- 13. Laravel Eloquent Carbon Дата получения только одного результата от subHours
- 14. PHP: час назад, х часов назад
- 15. календарь дает -12 часов назад
- 16. дата оболочки «-n часов» отличается «п часов назад» в какой-то ситуации
- 17. дата Javascript назад
- 18. Дата получения 2 недели назад с пакетным файлом
- 19. Javascript дата вычитать часов - Ошибка
- 20. Дата и время получения от Apple Server
- 21. POI sax Дата получения от соты
- 22. Дата получения от игровых сервисов google
- 23. Дата получения в sparql от dbpedia
- 24. Дата получения диапазона от текстового файла
- 25. iOS Дата получения от Дня Года
- 26. Дата получения от имени файла Использование ParseExact
- 27. Неправильное время от часов
- 28. Получить заказы от 12 часов назад SQL Server
- 29. Дата пометки времени назад
- 30. дата получения в nodejs
Почему DST не учитывается? – 2010-12-03 18:22:01
Первый способ работы, хотя я думаю, что лучше сказать, что он не учитывает переходы времени DST *. +1 за упоминание JodaTime. – 2010-12-03 18:22:37
@Thor: Потому что во время выполнения вы не знаете на основе `System # currentTimeMillis()`, был ли DST включен/отключен в течение последних 4 часов, поэтому вы можете потерять время, в течение которого вы закончите. – BalusC 2010-12-03 18:22:47