从4小时前获得日期

时间:2010-12-03 18:16:48

标签: java datetime date

如何在Java中返回比当前系统时间少4小时的Date对象?

7 个答案:

答案 0 :(得分:57)

最简单的方法之一:

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...

答案 1 :(得分:7)

其他答案是正确的,但我想提供现代答案。现代解决方案使用java.time,即现代Java日期和时间API。

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。当然,互联网上还有其他资源,请搜索。

答案 2 :(得分:6)

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

答案 3 :(得分:2)

将其转换为毫秒,减去4小时内的毫秒数,将其转换回日期。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

使用Calendar对象和add方法。

calendar.add(Calendar.HOUR, -4);

请参阅http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html