Bal*_*usC 60
最简单的方法之一:
Date date = new Date(System.currentTimeMillis() - (4 * 60 * 60 * 1000));
Run Code Online (Sandbox Code Playgroud)
但是,这不会考虑DST(夏令时).另一种选择是Calendar:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
Date date = calendar.getTime();
Run Code Online (Sandbox Code Playgroud)
然而,这是一个非常丑陋的API.另一种选择是JodaTime:
DateTime dateTime = new DateTime().minusHours(4);
Date date = dateTime.toDate(); // If you ever need this...
Run Code Online (Sandbox Code Playgroud)
其他答案是正确的,但我想提供现代答案.现代解决方案使用java.time现代Java日期和时间API.
Instant fourHoursAgo = Instant.now().minus(Duration.ofHours(4));
System.out.println(fourHoursAgo);
Run Code Online (Sandbox Code Playgroud)
这只是打印:
2018-01-31T15:22:21.113710Z
Run Code Online (Sandbox Code Playgroud)
在Z最终表示时间打印在UTC -如果你愿意在UTC抵消为零.这个Instant班级是现代的替代品Date,所以我建议你坚持下去.现代API通常使用起来更好,更清洁,设计更好.
请注意让库类为您减法4小时的优点:代码更易于阅读且不易出错.没有有趣的常数,没有读者花时间检查它们是否正确.
如果确实需要旧式Date对象,例如在使用无法更改或不想更改的旧API时,请按以下方式进行转换:
Date oldfashionedDate = Date.from(fourHoursAgo);
Run Code Online (Sandbox Code Playgroud)
链接: Oracle Tutorial trail:Date Time.当然,互联网上也有其他资源,请搜索.
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
calendar.getTime();
Run Code Online (Sandbox Code Playgroud)