Java 获取两个日期之间的日期列表时出错

Java 获取两个日期之间的日期列表时出错,java,android,date,android-fragments,android-activity,Java,Android,Date,Android Fragments,Android Activity,我尝试获取两个日期之间的日期列表。但是,列表中的所有值都是开始日期 比如说 日期:2017年10月6日 日期=2017年10月10日 ==>该列表的所有值均为日期(2017年10月6日) 预期------------------------------------------实际 日期[0]=2017年10月6日--------------------日期[0]=2017年10月6日 日期[1]=2017年10月7日--------------------日期[1]=2017年10月6日 日期[

我尝试获取两个日期之间的日期列表。但是,列表中的所有值都是开始日期

比如说

日期:2017年10月6日

日期=2017年10月10日

==>该列表的所有值均为日期(2017年10月6日)

预期------------------------------------------实际

日期[0]=2017年10月6日--------------------日期[0]=2017年10月6日

日期[1]=2017年10月7日--------------------日期[1]=2017年10月6日

日期[2]=2017年10月8日--------------------日期[2]=2017年10月6日

日期[3]=2017年10月9日--------------------日期[3]=2017年10月6日

日期[4]=2017年10月10日--------------------日期[4]=2017年10月6日

任何帮助都将不胜感激

public class fragTable extends Fragment{
...
private String mdateFrom = "06-10-2017";
private String mdateTo = "10-10-2017";

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    List<String> dates = new ArrayList<String>();    
    dates = getDaysBetweenDates(stringToDaTe(mdateFrom),stringToDaTe(mdateTo));
}

 public  List<String> getDaysBetweenDates(Date startdate, Date enddate)
{
    List<String> dates = new ArrayList<String>();
    Calendar calendar = new GregorianCalendar();
    calendar.setTime(startdate);

    while (calendar.getTime().before(enddate))
    {
        Date result = calendar.getTime();
        dates.add( datetoString(result));
        calendar.add(Calendar.DATE, 1);
    }
    return dates;
}
 //Convert String to Date  
 public Date stringToDaTe(String dateString)
{
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
    Date date = new Date();
    try {
        date = sdf.parse(dateString);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}
  //Convert Date to String
  public String datetoString(Date date)
{
    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
    Date today = Calendar.getInstance().getTime();
    String result = df.format(today);
    return result;
}
}
公共类fragTable扩展片段{
...
专用字符串mdateFrom=“06-10-2017”;
专用字符串mdateTo=“10-10-2017”;
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
列表日期=新建ArrayList();
dates=日期之间的GetDays(stringToDaTe(mdateFrom),stringToDaTe(mdateTo));
}
公共列表GetDaysBetween日期(日期开始日期、日期结束日期)
{
列表日期=新建ArrayList();
日历=新的公历日历();
日历设置时间(起始日期);
while(calendar.getTime().before(enddate))
{
日期结果=calendar.getTime();
dates.add(datetoString(result));
calendar.add(calendar.DATE,1);
}
返回日期;
}
//将字符串转换为日期
公共日期stringToDaTe(字符串日期字符串)
{
SimpleDataFormat sdf=新的SimpleDataFormat(“dd-MM-yyyy”);
日期=新日期();
试一试{
date=sdf.parse(日期字符串);
}捕获(解析异常){
e、 printStackTrace();
}
返回日期;
}
//将日期转换为字符串
公共字符串datetoString(日期)
{
SimpleDataFormat df=新的SimpleDataFormat(“dd-MM-yyyy”);
Date today=Calendar.getInstance().getTime();
字符串结果=df.format(今天);
返回结果;
}
}

以下是获取两个日期之间的日期的代码

public class test {
    private static String mdateFrom = "06-10-2017";
    private static String mdateTo = "10-10-2017";

    public static void main(String[] args) {
        List<String> dates = getDaysBetweenDates(stringToDaTe(mdateFrom), stringToDaTe(mdateTo));
        System.out.println(dates);
    }

    public static List<String> getDaysBetweenDates(Date startdate, Date enddate) {
        List<String> dates = new ArrayList<String>();
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(startdate);

        while (calendar.getTime().before(enddate)) {
            Date result = calendar.getTime();
            dates.add(formatDate(result));
            calendar.add(Calendar.DATE, 1);
        }
        return dates;
    }

    public static Date stringToDaTe(String dateString) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        Date date = new Date();
        try {
            date = sdf.parse(dateString);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }

    public static String formatDate(Date result) {
        String date = "";
        DateFormat df = new SimpleDateFormat("dd-MM/yyyy");
        date = df.format(result);
        return date;
    }
}

下面是获取两个日期之间的日期的代码

public class test {
    private static String mdateFrom = "06-10-2017";
    private static String mdateTo = "10-10-2017";

    public static void main(String[] args) {
        List<String> dates = getDaysBetweenDates(stringToDaTe(mdateFrom), stringToDaTe(mdateTo));
        System.out.println(dates);
    }

    public static List<String> getDaysBetweenDates(Date startdate, Date enddate) {
        List<String> dates = new ArrayList<String>();
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(startdate);

        while (calendar.getTime().before(enddate)) {
            Date result = calendar.getTime();
            dates.add(formatDate(result));
            calendar.add(Calendar.DATE, 1);
        }
        return dates;
    }

    public static Date stringToDaTe(String dateString) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        Date date = new Date();
        try {
            date = sdf.parse(dateString);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }

    public static String formatDate(Date result) {
        String date = "";
        DateFormat df = new SimpleDateFormat("dd-MM/yyyy");
        date = df.format(result);
        return date;
    }
}

检查您的
dateToString
方法:

public String datetoString(Date date)
{
    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
    Date today = Calendar.getInstance().getTime();
    String result = df.format(today);       // <= You're actually formatting "today" date, not "date"
    return result;
}

您的问题应该得到解决

检查您的
日期字符串
方法:

public String datetoString(Date date)
{
    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
    Date today = Calendar.getInstance().getTime();
    String result = df.format(today);       // <= You're actually formatting "today" date, not "date"
    return result;
}

在不知道如何打印输出的情况下,您的问题应该得到解决。我猜您使用的是
datetoString()

它有

Date today = Calendar.getInstance().getTime();
String result = df.format(today);
return result; // returns always today, not given date
也许它应该有

String result = df.format(date) // the input ;
return result;

在不知道如何打印输出的情况下,我猜您使用了
datetoString()

它有

Date today = Calendar.getInstance().getTime();
String result = df.format(today);
return result; // returns always today, not given date
也许它应该有

String result = df.format(date) // the input ;
return result;
推荐使用Java8 代码变得更加简单和轻量级,无需从字符串来回转换。此外,您还可以避免潜在的时区问题

public List<LocalDate> getDaysBetweenDates(Date startdate, Date enddate)
{
    LocalDate dateFrom  =stringToDaTe(mdateFrom).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    LocalDate dateTo  =stringToDaTe(mdateTo).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

    long days = Duration.between(dateFrom.atStartOfDay(), dateTo.atStartOfDay()).toDays();
    List<LocalDate> resultList= new ArrayList<LocalDate>();
    long i=0;
    do {
        resultList.add(dateFrom);
        dateFrom = dateFrom.plusDays(1);
        i++;

    } while (i < days+1);
    return resultList;      
}
public List getDaysbetween日期(日期开始日期、日期结束日期)
{
LocalDate dateFrom=stringToDaTe(mdateFrom).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate dateTo=stringToDaTe(mdateTo).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
长天数=持续时间.between(dateFrom.atStartOfDay(),dateTo.atStartOfDay()).toDays();
List resultList=new ArrayList();
长i=0;
做{
结果列表.add(dateFrom);
dateFrom=dateFrom.plusDays(1);
i++;
}而(i
建议使用java 8 代码变得更加简单和轻量级,无需从字符串来回转换。此外,您还可以避免潜在的时区问题

public List<LocalDate> getDaysBetweenDates(Date startdate, Date enddate)
{
    LocalDate dateFrom  =stringToDaTe(mdateFrom).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    LocalDate dateTo  =stringToDaTe(mdateTo).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

    long days = Duration.between(dateFrom.atStartOfDay(), dateTo.atStartOfDay()).toDays();
    List<LocalDate> resultList= new ArrayList<LocalDate>();
    long i=0;
    do {
        resultList.add(dateFrom);
        dateFrom = dateFrom.plusDays(1);
        i++;

    } while (i < days+1);
    return resultList;      
}
public List getDaysbetween日期(日期开始日期、日期结束日期)
{
LocalDate dateFrom=stringToDaTe(mdateFrom).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate dateTo=stringToDaTe(mdateTo).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
长天数=持续时间.between(dateFrom.atStartOfDay(),dateTo.atStartOfDay()).toDays();
List resultList=new ArrayList();
长i=0;
做{
结果列表.add(dateFrom);
dateFrom=dateFrom.plusDays(1);
i++;
}而(i
发布该错误,而不是datetoString是什么?您的问题不清楚,预期的输出是什么?您是否只希望日期介于开始日期和结束日期之间?使用此选项,您可以更轻松地执行此任务。发布此错误,而不是将日期设置为字符串?您的问题不清楚,预期的输出是什么?您是否只希望日期介于开始日期和结束日期之间?使用此选项,您可以更轻松地执行此任务。