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

获取java中前30天的开始时间,java,Java,我正在尝试获取前30天的当前日期和时间。。但是,这不是别的 new Date(System.currentTimeMillis() - 30 * 24 * 60 * 60 * 1000) 这又回来了 Tue Jul 21 04:41:20 IST 2015 有什么错误吗?从来没有,从来没有,从来没有做过像系统这样的事情。currentTimeMillis()-30*24*60*60*100,有太多关于时间操纵的规则,这种事情从来都不好用 Java8的时间API 其中输出2015-06-01T

我正在尝试获取前30天的当前日期和时间。。但是,这不是别的

new Date(System.currentTimeMillis() - 30 * 24 * 60 * 60 * 1000)
这又回来了

Tue Jul 21 04:41:20 IST 2015

有什么错误吗?

从来没有,从来没有,从来没有做过像系统这样的事情。currentTimeMillis()-30*24*60*60*100,有太多关于时间操纵的规则,这种事情从来都不好用

Java8的时间API 其中输出
2015-06-01T16:15:54.868

其中输出
2015-06-01T16:18:22.489

历法 如果你真的很绝望

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

它输出的是2015年6月1日星期一16:19:45东部标准时间

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

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

参见详细链接:

< P>代码,您提供的代码>新日期(System .CurrurthTimeMLILs)- 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.

JodaTime、Java8的时间API、日历等等@MadProgrammer,请告诉我上述codeDate/Time算法的问题被一系列规则和条件所包围,而这些规则和条件是您刚刚忽略的。这种方法总是导致糟糕的结果jodatime库在java中更容易处理日期/时间。我假设在您的代码中,计算是用int完成的,然后给出一个数字溢出,改为try long。例如,许多操作系统以几十毫秒为单位测量时间。这是OP的情况吗?@theRoot我不这么认为,正如Andre在评论中指出的那样,他们更可能遇到整数溢出问题,但尽管如此,像那样的毫秒操纵从来都不是一个好主意,一分钟不总是60秒,一小时不总是60分钟,一天不总是24小时。日期/时间如此扭曲,一年中实际上有365.25天,这意味着一个月有30.4375天,一个月有4.348214285714286周。。。对不起,这太离谱了。最好使用一个专用的库来保存你的理智
Date currentDate = new Date();
Date dateBefore30Days = DateUtils.addDays(currentDate, -30);
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.