Java - 获取日期之间的天数

时间:2017-04-15 16:03:06

标签: java date

我已经获得了"yyyy-MM-dd"格式的日期列表,我希望在今天的日期和#34; 2017-04-15"之间有一些天。列表中的第一个日期高于我今天的日期。

3 个答案:

答案 0 :(得分:1)

我发现您的活动按日期排序。我假设您可以使用Java 8.这是使用Java 8中引入的java.time类(并向后移植到Java 6和7)变得如此容易的任务之一。

使用LocalDate.now()获取今天的日期。

遍历您的活动,始终跟踪最近的活动日期。对于每个活动,请使用LocalDate.parse()将活动的日期转换为LocalDate。 1-arg parse方法适合您的格式。与今天的日期和迄今为止遇到的最早的未来事件日期相比较;如果在之间,则存储为新的最接近日期。使用isAfter()和/或isBefore进行比较。

循环之后,您将知道日期,或者您将知道根本没有未来事件。在前一种情况下,使用ChronoUnit.DAYS.between()获取从当前日期到事件日期的天数。

快乐的编码。

答案 1 :(得分:0)

解决方案1 ​​

如果您使用joda library,那么很容易,您可以使用Days.daysBetween

Date startDate = ...;
Date endDate = ...;

int nbrDays = Days.daysBetween(new LocalDate(startDate), new LocalDate(endDate)).getDays();

解决方案2

Date startDate = ...;
Date endDate = ...;

Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
int day1 = cal.get(Calendar.DAY_OF_MONTH);

cal.setTime(endDate);
int day2 = cal.get(Calendar.DAY_OF_MONTH);

int nbrDays = day1 - day2;
System.out.println(nbrDays);

您必须导入:

import java.util.Calendar;
import java.util.Date;

解决方案3

如果您的日期采用此格式"yyyy-MM-dd",那么您可以有两个这样的日期:

String date1 = "1991-07-03";
String date2 = "2017-04-15";

您应该做什么,用-分隔您的日期:

String spl1[] = date1.split("-");
String spl2[] = date2.split("-");

计算两个日期之间的差异:

int year1  = Integer.parseInt(spl1[0]);
int month1 = Integer.parseInt(spl1[1]);
int days1  = Integer.parseInt(spl1[2]);

int year2  = Integer.parseInt(spl2[0]);
int month2 = Integer.parseInt(spl2[1]);
int days2  = Integer.parseInt(spl2[2]);

//进行一些计算,最后你可以得到这种不确定性,这项工作我会让它为你服务。

答案 2 :(得分:0)

这应该可以解决您的问题。

        SimpleDateFormat myDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        List<Date> dateList = new ArrayList<Date>();
        try {
            beforeDate = myDateFormat.parse("2016-01-13");
            dateList.add(myDateFormat.parse("2016-01-10"));
            dateList.add(myDateFormat.parse("2016-01-11"));
            dateList.add(myDateFormat.parse("2016-01-12"));
            dateList.add(myDateFormat.parse("2016-01-19"));
            dateList.add(myDateFormat.parse("2016-01-20"));
            dateList.add(myDateFormat.parse("2016-01-21"));
        } catch (ParseException e) {
            System.out.println(e.getMessage());
        }
        //add here
        boolean check = true;
        for(int i = 0; check && i < dateList.size();i++){
            if(dateList.get(i).after(beforeDate)){
                afterDate = dateList.get(i);
                check = false;
            }
        }
        System.out.println(beforeDate+" "+afterDate);
        long days = ChronoUnit.DAYS.between(LocalDate.parse(myDateFormat.format(beforeDate)), LocalDate.parse(myDateFormat.format(afterDate)));
        if(days>0){
            System.out.println(days);
        }else{
            System.out.println(0-days);
        }

如果你想对dateList进行排序,那么想要获取afterDate,然后在dateList中添加日期元素后使用这段代码

Collections.sort(dateList,new Comparator<Date>() {
            @Override
            public int compare(Date o1, Date o2) {
                return o1.compareTo(o2);
            }
        });

这将允许您按升序对日期进行排序。