在java中获取前30天的开始时间

时间:2015-07-01 06:14:36

标签: java

我试图获取前30天的当前日期和时间..但是,它不是别的东西

new Date(System.currentTimeMillis() - 30 * 24 * 60 * 60 * 1000)

这是返回

Tue Jul 21 04:41:20 IST 2015

有什么不对吗

3 个答案:

答案 0 :(得分:6)

从来没有,永远不会做System.currentTimeMillis() - 30 * 24 * 60 * 60 * 100这样的事情,有太多的时间操纵规则,这种事情永远不会有效

Java 8的Time API

LocalDateTime ldt = LocalDateTime.now().minusDays(30);

哪个输出2015-06-01T16:15:54.868

JodaTime

LocalDateTime ldt = new LocalDateTime();
ldt = ldt.minusDays(30);

哪个输出2015-06-01T16:18:22.489

日历

如果你真的很绝望

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -30);
Date date = cal.getTime();

哪个输出Mon Jun 01 16:19:45 EST 2015

答案 1 :(得分:1)

您可以使用Apache Commons Library (commons-lang)

Date currentDate = new Date();
Date dateBefore30Days = DateUtils.addDays(currentDate, -30);

有关详细信息,请参阅此链接:http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html

答案 2 :(得分:0)

您提供的代码new Date(System.currentTimeMillis() - 30 * 24 * 60 * 60 * 1000)可能会给出错误的结果,因为它不会考虑Java实现的任何日期/时间逻辑。这将只给出数学上正确的结果,但不能给出逻辑上正确的结果。

您可以在不使用任何外部库的情况下使用java.util.Calendar类。

Calendar calendar = Calendar.getInstance(); // get Calendar Instance
calendar.add(Calendar.DATE, -30); // add -30 days as you need to subtract 30 days
Date dateRequired = calendar.getTime(); // get the new date from modified cal object.