//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.
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.
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
- Oracle tutorial: Date Time, explaining how to use
java.time
. - ThreeTen Backport project
- ThreeTenABP, Android edition of ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project, with a very thorough explanation.
- Java Specification Request (JSR) 310, where the modern date and time API was first described.
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);
}
来源:https://stackoverflow.com/questions/48174580/how-to-get-previous-7-dates-from-a-particular-date-in-javai-am-getting-7-dates