SATYAJIT TARAFDAR
SATYAJIT TARAFDAR

Reputation: 69

How to get previous 7 dates from a particular date in java?I am getting 7 dates from present date, but I want from particular date

//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("d-M-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
        }
    }

}

ie, its giving previous 7 dates from present date, but I want previous 7 dates from particular date.

Upvotes: -1

Views: 497

Answers (3)

Anonymous
Anonymous

Reputation: 86379

As Uta Alexandru and Basil Bourque have said already, don’t use the long outmoted classes SimpleDateFormat and Calendar. java.time, the modern Java date and time API also known as JSR-310, is so much nicer to work with:

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-M-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);
    }

This prints:

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

Not only is the code slightly simpler and shorter, more importantly, it is clearer and more natural to read.

Question: Can I use java.time on Android?

You certainly can. It just requires at least Java 6.

  • In Java 8 and later the new API comes built-in.
  • In Java 6 and 7 get the ThreeTen Backport, the backport of the new classes (ThreeTen for JSR 310).
  • On Android, use the Android edition of ThreeTen Backport. It’s called ThreeTenABP.

Links

Upvotes: 1

Basil Bourque
Basil Bourque

Reputation: 340070

tl;dr

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

java.time

You are using troublesome old date-time classes that are now legacy, supplanted by the java.time classes.

Use LocalDate for a date-only without time-of-day.

Using the Month enum.

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

Using month numbers, 1-12 for January-December.

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

Collect a sequence of dates.

List<LocalDate> 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. 
}

For earlier Android, use the ThreeTen-Backport and ThreeTenABP projects.

Upvotes: 3

vikas kumar
vikas kumar

Reputation: 11018

if you want to have some date from some data do something like below.

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);
}

Upvotes: 0

Related Questions