我已经获得了"yyyy-MM-dd"
格式的日期列表,我希望在今天的日期和#34; 2017-04-15"之间有一些天。列表中的第一个日期高于我今天的日期。
答案 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);
}
});
这将允许您按升序对日期进行排序。