Java 获取发生在两个日期之间的日期列表

Java 获取发生在两个日期之间的日期列表,java,date,Java,Date,我正在尝试获取日期,从开始日期到结束日期每5天发生一次 Eg. if start date= 11/10/2014 i.e MM/DD/YYYY format and end date =11/26/2014 then my **expected output** is = [11/15/2014,11/20/2014,11/25/2014] 我在下面尝试过,但非常困惑在哪里运行循环以获得精确的输出。目前,从下面的代码中,我只得到列表中的一个日期 import java.text.

我正在尝试获取日期,从开始日期到结束日期每5天发生一次

Eg.
if start date= 11/10/2014   i.e  MM/DD/YYYY format
and  end date =11/26/2014

then my **expected output** is =
 [11/15/2014,11/20/2014,11/25/2014]
我在下面尝试过,但非常困惑在哪里运行循环以获得精确的输出。目前,从下面的代码中,我只得到列表中的一个日期

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date; 
import java.util.List; 


public class TestDate {
        //     mm/dd/yyyy
    public List getDates(Date fromDate,int frequency,Date endDate){
        List list=new ArrayList<Date>();
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");


        Calendar c = Calendar.getInstance();
        c.setTime(fromDate); // Now use today date. 
        c.add(Calendar.DATE, frequency); // Adding 5 days  
        String newDate = sdf.format(c.getTime());
         String sEndDate=sdf.format(endDate);

        if((newDate.compareTo(sEndDate) < 0) || (newDate.compareTo(sEndDate) == 0)){
            list.add(newDate); 
        }

        //Weekly=7,Bi-Weekly14,Monthly-30,Semi-Monthly-15 
        return list; 
    }
    public static void main(String[] args) {
        try {
        TestDate obj=new TestDate();
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
        Date s = sdf.parse("11/10/2014");
        Date e = sdf.parse("11/26/2014");
        System.out.println(obj.getDates(s, 5, e));
        }
        catch(Exception e) { 
            System.err.println("--exp in main---"+e);   
        }
    }
}

为什么要将日期作为字符串并按字典顺序进行比较,而不是将它们作为日期进行比较

String newDate = sdf.format(c.getTime());
String sEndDate=sdf.format(endDate);
这应该更改为

 Date newDate = c.getTime();
此外,您使用的是两个if条件,您可以在如下一种情况下执行:

if (newDate.compareTo(endDate) <= 0) {
    list.add(newDate);
}

if(newDate.compareTo(endDate)使用Apache commons。这将使您的代码变得简单

    Date tempDate = DateUtils.addDays(fromDate, frequency);
    while (tempDate.before(endDate))
    {
        list.add(tempDate);
        tempDate = DateUtils.addDays(tempDate, frequency);
    }
    return list; 
试试这个

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class NewClass1 {
    //     mm/dd/yyyy

    public List getDates(Date fromDate, int frequency, Date endDate) {
        List list = new ArrayList<Date>();
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");


        Calendar c = Calendar.getInstance();
        c.setTime(fromDate); // Now use today date.
        c.add(Calendar.DATE, frequency); // Adding 5 days
        String newDate = sdf.format(c.getTime());
        //System.out.println("date"+newDate);
        String formDate = sdf.format(fromDate);
        String sEndDate = sdf.format(endDate);
        int x = 1;
        while (((newDate.compareTo(sEndDate) > 0) || (newDate.compareTo(sEndDate) != 0)) && x < frequency) {
            c.add(Calendar.DATE, frequency);
            sEndDate = sdf.format(c.getTime());
            x++;
            System.out.println("date: " + sEndDate);
            list.add(newDate);
        }

        //Weekly=7,Bi-Weekly14,Monthly-30,Semi-Monthly-15
        return list;
    }

    public static void main(String[] args) {
        try {
            NewClass1 obj = new NewClass1();
            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
            Date s = sdf.parse("11/10/2014");
            Date e = sdf.parse("11/26/2014");
            obj.getDates(s, 5, e);
        } catch (Exception e) {
            System.err.println("--exp in main---" + e);
        }
    }
}
import java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.List;
公共类新类别1{
//年月日
公共列表getDates(日期fromDate、整数频率、日期endDate){
列表=新的ArrayList();
SimpleDataFormat sdf=新的SimpleDataFormat(“MM/dd/yyyy”);
Calendar c=Calendar.getInstance();
c、 setTime(fromDate);//现在使用今天日期。
c、 添加(Calendar.DATE,frequency);//添加5天
字符串newDate=sdf.format(c.getTime());
//系统输出打印项次(“日期”+新日期);
字符串formDate=sdf.format(fromDate);
字符串sEndDate=sdf.format(endDate);
int x=1;
而(((newDate.compareTo(sEndDate)>0)| |(newDate.compareTo(sEndDate)!=0))&&x
我的问题清楚吗?你能理解我在问什么吗?因为仍然没有答复,所以我认为没有人理解我的问题。你在不到5分钟前问了你的问题!你的代码有很多问题:1)
列表
初始化为
数组列表
,但是你把
String
放在里面2)当你比较
newDate
sEndDate
时,你是在做
String
比较,而不是
Date
比较。我可能是在字符串中复制的,因为我需要“MM/DD/YYYY”的输出格式您可以在进入列表后执行,也可以在添加到列表时执行。并且,
endDate
date我将仅以这种格式接收“MM/DD/YYYY”,因此它的字符串。所以我是这样做的,没关系,请看一看,并以您的方式尝试(不要盲目复制粘贴此代码),看看这是否有助于您理解错误,以及如何做得更好。好的。我更新了上面的代码,但缺少起始日期。输出应该是
[2014年11月15日星期六00:00:00 IST,2014年11月20日星期四00:00:00 IST,2014年11月25日星期二00:00:00 IST]
但我的新更新代码只给出了
[2014年11月20日星期四00:00 IST,2014年11月25日星期二00:00 IST]
为什么?
    Date tempDate = DateUtils.addDays(fromDate, frequency);
    while (tempDate.before(endDate))
    {
        list.add(tempDate);
        tempDate = DateUtils.addDays(tempDate, frequency);
    }
    return list; 
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class NewClass1 {
    //     mm/dd/yyyy

    public List getDates(Date fromDate, int frequency, Date endDate) {
        List list = new ArrayList<Date>();
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");


        Calendar c = Calendar.getInstance();
        c.setTime(fromDate); // Now use today date.
        c.add(Calendar.DATE, frequency); // Adding 5 days
        String newDate = sdf.format(c.getTime());
        //System.out.println("date"+newDate);
        String formDate = sdf.format(fromDate);
        String sEndDate = sdf.format(endDate);
        int x = 1;
        while (((newDate.compareTo(sEndDate) > 0) || (newDate.compareTo(sEndDate) != 0)) && x < frequency) {
            c.add(Calendar.DATE, frequency);
            sEndDate = sdf.format(c.getTime());
            x++;
            System.out.println("date: " + sEndDate);
            list.add(newDate);
        }

        //Weekly=7,Bi-Weekly14,Monthly-30,Semi-Monthly-15
        return list;
    }

    public static void main(String[] args) {
        try {
            NewClass1 obj = new NewClass1();
            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
            Date s = sdf.parse("11/10/2014");
            Date e = sdf.parse("11/26/2014");
            obj.getDates(s, 5, e);
        } catch (Exception e) {
            System.err.println("--exp in main---" + e);
        }
    }
}