如何从java中的特定日期获取前7个日期?我从当前日期获得7个日期,但我想从特定日期开始

//explain public class DateLoop { static String finalDate; static String particularDate; public static void main(String[] args) { // TODO Auto-generated method stub SimpleDateFormat sdf = new SimpleDateFormat("dM-yyyy "); Calendar cal = Calendar.getInstance(); particularDate = "2-1-2018"; // get starting date cal.add(Calendar.DAY_OF_YEAR, -7); // loop adding one day in each iteration for(int i = 0; i< 7; i++){ cal.add(Calendar.DAY_OF_YEAR, 1); finalDate =sdf.format(cal.getTime()); System.out.println(finalDate); //ie, its giving previous 7 dates from present date, but I want //particular date... thanks in advance } } } 

即,它从现在的日期开始提供前7个日期,但我想要特定日期之前的7个日期。

TL;博士

 LocalDate.of( 2018 , Month.JANUARY , 23 ) .minusDays( … ) 

java.time

您正在使用现在遗留的麻烦的旧日期时间类,取而代之的是java.time类。

使用LocalDate仅限日期,无需时间。

使用Month枚举。

 LocalDate start = LocalDate.of( 2018 , Month.JANUARY , 23 ) ; // 2018-01-23. 

使用月份编号,1月至12月为1-12。

 LocalDate start = LocalDate.of( 2018 , 1 , 23 ) ; // 2018-01-23. 

收集一系列日期。

 List dates = new ArrayList<>( 7 ) ; for( int i = 1 ; i <= 7 ; i ++ ) { LocalDate ld = start.minusDays( i ) ; // Determine previous date. dates.add( ld ) ; // Add that date object to the list. } 

对于早期的Android,请使用ThreeTen- BackportThreeTenABP项目。

如果你想从某些数据中得到一些日期,请执行以下操作。

 public void dateFromRandomDate(String date){ SimpleDateFormat formatter2=new SimpleDateFormat("dd-MMM-yyyy"); Date date2=formatter2.parse(date); Calendar calendar = Calendar.getInstance(); //this sets the date to given date calendar.calendar.setTime(date2); //now call getTime() or add ,subtract date from here //this will add 1 year to given one,similarlly others will work. calendar.add(Calendar.YEAR,1); } 

正如Uta Alexandru和Basil Bourque已经说过的那样,不要使用长期远出的类SimpleDateFormatCalendarjava.time ,现代Java日期和时间API,也称为JSR-310,可以更好地使用:

  DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dM-uuuu"); LocalDate date = LocalDate.parse("2-1-2018", dtf) .minusDays(7); for(int i = 0; i < 7; i++) { date = date.plusDays(1); String finalDate = date.format(dtf); System.out.println(finalDate); } 

这打印:

 27-12-2017 28-12-2017 29-12-2017 30-12-2017 31-12-2017 1-1-2018 2-1-2018 

代码不仅更简单,更简单,更重要的是,它更清晰,更自然。

问题:我可以在Android上使用java.time吗?

你当然可以。 它至少需要Java 6

  • 在Java 8及更高版本中,新的API内置。
  • 在Java 6和7中获取ThreeTen Backport,这是新类的后端(JST 310的ThreeTen)。
  • 在Android上 ,使用Android版的ThreeTen Backport。 它被称为ThreeTenABP。

链接

  • Oracle教程:Date Time ,解释了如何使用java.time
  • ThreeTen Backport项目
  • ThreeTenABP ,Android版ThreeTen Backport
  • 问题:如何在Android项目中使用ThreeTenABP ,并给出了非常详尽的解释。
  • Java规范请求(JSR)310 ,其中首先描述了现代日期和时间API。