2012-07-10 11 views
6

Witam jestem nowy w Androidzie. Jak uzyskać wszystkie daty między dwoma datami w systemie Android.genarate daty między dwiema datami w Androidzie

Na przykład. Mam dwa struny.
String first="2012-07-15";
String second="2012-07-21";

przekonwertować i szukaj dat z tego strun.

DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat df2 = new SimpleDateFormat("MMM dd");
String mydate = df2.format(df1 .parse(first));

ten sposób mogę uzyskać zarówno pochodzi z pierwszej i drugiej String.

Teraz wyświetlam także wszystkie daty między tymi dwoma datami. Czy ktokolwiek może mi pomóc to znaleźć.

+3

możliwe duplikat [W jaki sposób można zwiększyć datę o jeden dzień w Javie?] (http://stackoverflow.com/questions/428918/how-can-i-increment-a-date-by-one-day-in-java) - Możesz uruchomić inkrement w pętli, aby utworzyć seria dat. – assylias

Odpowiedz

24

lepiej nie używać żadnych zakodowanych wartości w obliczeniach daty. możemy polegać na java Calendar metod klasy, aby wykonać to zadanie

zobaczyć kod

private static List<Date> getDates(String dateString1, String dateString2) 
{ 
    ArrayList<Date> dates = new ArrayList<Date>(); 
    DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd"); 

    Date date1 = null; 
    Date date2 = null; 

    try { 
     date1 = df1 .parse(dateString1); 
     date2 = df1 .parse(dateString2); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    Calendar cal1 = Calendar.getInstance(); 
    cal1.setTime(date1); 


    Calendar cal2 = Calendar.getInstance(); 
    cal2.setTime(date2); 

    while(!cal1.after(cal2)) 
    { 
     dates.add(cal1.getTime()); 
     cal1.add(Calendar.DATE, 1); 
    } 
    return dates; 
} 

i używać go jak poniżej

List<Date> dates = getDates("2012-02-01", "2012-03-01"); 
    for(Date date:dates) 
     System.out.println(date); 
+0

Dziękuję bardzo, kolego, że działa. –

+0

szczęśliwy, że mogę ci pomóc – sunil

1
public class DummyWorks extends Activity 
{ 
static final long ONE_DAY = 24 * 60 * 60 * 1000L; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    getDatesBetween("03/23/2011","03/28/2011"); 
} 

public static void getDatesBetween(String startDate,String endDate) { 


    long from=Date.parse(startDate); 

    long to=Date.parse(endDate); 

    int x=0; 

    while(from <= to) { 
      x=x+1; 
      System.out.println ("Dates : "+new Date(from)); 
      from += ONE_DAY; 
    } 
    System.out.println ("No of Dates :"+ x); 


} 
} 
+0

Dodanie milisekund do daty wiąże się z dużym ryzykiem niepowodzenia z powodu oszczędności czasu i innych dziwnych zmian strefy czasowej. – assylias

+0

dzięki @assylias, teraz przetestowałem it.its uzyskanie prawidłowego wyniku po zmianie "długi ONE_DAY" –

+0

witam @Ramkiran dzięki za odpowiedź. Ale mam błąd na 'long from = Date.parse (startDate);' który mówi, że java.illegalArgumentException na java.util.Date.parse. –

Powiązane problemy