【问题标题】:Get list of dates between 2 dates has error获取两个日期之间的日期列表有错误
【发布时间】:2017-10-06 06:17:35
【问题描述】:

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

例如

日期从 = 06-10-2017

dateto = 2017 年 10 月 10 日

==> 列表的所有值都是 datefrom (06-10-2017)

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

日期[0] = 06-10-2017--------------------日期[0] = 06-10-2017

日期[1] = 07-10-2017-------日期[1] = 06-10-2017

日期[2] = 08-10-2017--------------------日期[2] = 06-10-2017

日期[3] = 09-10-2017-------日期[3] = 06-10-2017

日期[4] = 10-10-2017--------------------日期[4] = 06-10-2017

任何帮助将不胜感激。

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

【问题讨论】:

  • 发布该错误而不是
  • 什么是 datetoString?
  • 您的问题不清楚,预期的输出是什么?你只想要日期之间的日期,不包括开始日期和结束日期??
  • 使用Joda Time,您可以更轻松地执行此任务。

标签: java android date android-fragments android-activity


【解决方案1】:

检查您的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;
}

通过将该行更改为

String result = df.format(date);

你的问题应该解决了

【讨论】:

    【解决方案2】:

    这是获取两个日期之间的日期的代码。

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

    输出是:

    [06-10/2017, 07-10/2017, 08-10/2017, 09-10/2017]
    

    【讨论】:

      【解决方案3】:

      在不知道如何打印输出的情况下,我猜你使用的是 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;
      

      【讨论】:

        【解决方案4】:

        推荐使用来自 java 8 的LocalDate 代码变得更简单和轻量级,无需从 String 来回转换。另外,您可以避免潜在的时区问题

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

        【讨论】:

          猜你喜欢
          • 2010-10-05
          • 2018-09-17
          • 1970-01-01
          • 2017-06-12
          • 2013-08-09
          • 2018-01-11
          • 1970-01-01
          • 2022-01-04
          • 2010-11-25
          相关资源
          最近更新 更多