了解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(); }