了解java中的最近30天,60天和90天

如何获取java中给定日期的最后30/60/90天记录?

我有一些收到日期的记录。 我想从收到的日期获取最近30或60或90天的记录。 怎么解决?

使用java.util.Calendar 。

Date today = new Date(); Calendar cal = new GregorianCalendar(); cal.setTime(today); cal.add(Calendar.DAY_OF_MONTH, -30); Date today30 = cal.getTime(); cal.add(Calendar.DAY_OF_MONTH, -60); Date today60 = cal.getTime(); cal.add(Calendar.DAY_OF_MONTH, -90); Date today90 = cal.getTime(); 

捆绑的java.util.Date和.Calendar类是众所周知的麻烦。 避免他们。

乔达时间

下面是一些使用Joda-Time 2.3库的LocalDate类的示例代码。

 LocalDate now = LocalDate.now(); LocalDate thirty = now.minusDays( 30 ); LocalDate sixty = now.minusDays( 60 ); LocalDate ninety = now.minusDays( 90 ); 

转储到控制台……

 System.out.println( "now: " + now ); System.out.println( "thirty: " + thirty ); System.out.println( "sixty: " + sixty ); System.out.println( "ninety: " + ninety ); 

跑的时候……

 now: 2014-03-26 thirty: 2014-02-24 sixty: 2014-01-25 ninety: 2013-12-26 

时区

一天的开始和结束取决于您的时区。 巴黎新的一天比蒙特利尔更早出现。

默认情况下,LocalDate类使用JVM的默认时区来确定当前日期。 或者,您可以传递DateTimeZone对象。

 LocalDate localDate = new LocalDate( DateTimeZone.forID( "Europe/Paris" ) ); 

java.time

Java 8带来了新的内置java.time包 。 这些新类旨在取代旧的捆绑java.util.Date/Calendar类。 java.time类的灵感来自JSR 310定义的Joda-Time。

在本课题的特定情况下,上面看到的Joda-Time的示例代码与java.time完全相同。 只有import语句才会有所不同。

老实说,我建议您使用Joda作为日期和时间库。 它不仅具有优越的API,而且它理解(例如,具有类)概念,例如句点,持续时间和类似的东西。

不确定从哪里获取数据,但是为了计算30天之后的日期,你可以使用Calendar类的add函数,如下所示:

c.add(Calendar.DAY_OF_MONTH,-30); //假设c的类型为java.util.Calendar

现在要弄清楚特定日期是在今天和30天之间,你可以使用before()和after()函数来确定日期是在今天之前,还是在今天之前的第30天之后。

使用日历,我需要从当前日期开始减去N天。 最好的方法是:

 public Date getDateVariation(Integer variation, Date currentDate) { Calendar c = Calendar.getInstance(); c.setTime(currentDate); c.add(Calendar.DAY_OF_YEAR, - (variation)); return c.getTime(); } 

变化是我想要10/30/60/120天的N天。

 private static Date daysAgo(int days) { GregorianCalendar gc = new GregorianCalendar(); gc.add(Calendar.DATE, -days); return gc.getTime(); }