Java 迭代列表对象中的日期变量,并根据位置选择日期范围
我的情况是在Java 迭代列表对象中的日期变量,并根据位置选择日期范围,java,Java,我的情况是在列表中添加了日期。现在,我想选择前两个职位日期作为开始日期和结束日期,然后选择下两个职位作为开始日期和结束日期,依此类推。在我得到开始和结束日期之后,我需要找到两天之间的天数,并计算天数的金额 以下是列表对象中的日期 [2018-09-052018-09-1412018-09-292018-10-1412018-10-29] 2018-09-05作为起始日期和2018-09-13作为结束日期-查找这些日期之间的天数 2018-09-14作为起始日期和2018-09-28作为结束日期-
列表中添加了日期。现在,我想选择前两个职位日期作为开始日期和结束日期,然后选择下两个职位作为开始日期和结束日期,依此类推。在我得到开始和结束日期之后,我需要找到两天之间的天数,并计算天数的金额
以下是列表对象中的日期
[2018-09-052018-09-1412018-09-292018-10-1412018-10-29]
2018-09-05
作为起始日期和2018-09-13
作为结束日期-查找这些日期之间的天数
2018-09-14
作为起始日期和2018-09-28
作为结束日期-查找这些日期之间的天数
2018-09-29
作为起始日期和2018-10-13
作为结束日期-查找这些日期之间的天数
2018-10-14
作为起始日期和2018-10-28
作为结束日期-查找这些日期之间的天数
请帮我怎么找到它。
提前感谢。我不完全理解您问题的第一部分关于选择日期的内容,但要找到日期之间的天数,您可以执行以下操作:
import java.time.LocalDate;
import java.time.Period;
public class Application {
public static void main(String[] args) {
LocalDate startDate= LocalDate.now();
LocalDate endDate= today.plusDays(6);
Period period = Period.between(startDate, endDate);
int difference = period.getDays();
}
}
如果列表包含偶数个有效日期字符串,则以下代码将起作用
将迭代列表,提取每对日期,并以天为单位计算差值:
public static long getDaysDif(LocalDate fromDate, LocalDate toDate) {
return ChronoUnit.DAYS.between(fromDate, toDate);
}
public static LocalDate getLocalDateFromString(String d, String format) {
return LocalDate.parse(d, DateTimeFormatter.ofPattern(format));
}
public static void main(String[] args) {
List<String> list = new ArrayList<>
(Arrays.asList
("2018-09-05", "2018-09-13", "2018-09-14", "2018-09-28", "2018-09-29", "2018-10-13"));
for (int i = 0; i < list.size(); i+=2) {
String strStart = list.get(i);
String strEnd = list.get(i + 1);
LocalDate dateStart = getLocalDateFromString(strStart, "yyyy-MM-dd");
LocalDate dateEnd = getLocalDateFromString(strEnd, "yyyy-MM-dd");
long dif = getDaysDif(dateStart, dateEnd);
System.out.println(dif);
}
}
列表将保持元素的顺序。您必须确保后续元素应大于第一个元素&小于下一个元素,否则您的逻辑将失败。请显示您尝试的代码,直到现在您的前任有一个包含5项的列表,但您的配对与列表项不匹配。有什么遗漏吗?@Shriram,我正在使用TreeSet将日期按顺序排序。@forpas,这是正确的顺序。实际上,当我计算天数差异时,我必须从结束日期减少一天。@Parthee因此,如果两个日期分别为“2018-09-05”和“2018-09-06”,我的代码将打印1。你想让它打印0吗?你可以使用钻石操作符。谢谢你的帮助。
8
14
14