获取2日期之间的日期列表有错误
问题描述:
我尝试获取2日期之间的日期列表。但是,列表中的所有值都是开始日期。获取2日期之间的日期列表有错误
例如
datefrom = 2017年6月10日
dateto = 2017年10月10日
==>列表的所有的值是datefrom(2017年6月10日)
预计---------------------------------------实际
日期[0] = 06-10-2017 -------------------日期[0] = 06-10-2017
日期[1] = 07-10-2017 -------------------日期[1] = 06-10-2017
日期[2] = 08-10-2017 ------------------- dates [2] = 06-10-2017
日期[3] = 09-10-2017- ------------------ dates [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
方法:
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);
你的问题应该得到解决
答
这里是获取两个日期之间日期的代码。
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]
答
不知道如何打印您的输出我猜你使用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;
答
推荐使用LocalDate从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;
}
发布错误比 –
什么是datetoString? – mikep
你的问题不清楚,预期输出是什么?你只需要在排除开始日期和结束日期之间的日期? – Count