java部分日期(月和日)在一个范围内出现了多少个实例,以及它在一周中的哪一天
在Java中,我将如何构建一个实用程序,该实用程序将获取一个日期范围(开始日期和结束日期),然后查看给定的部分日期(月份和月份)在该范围内出现的次数,并为每个匹配项向列表中添加一个条目
在我的例子中,我想给它一个范围,比如说5年——从2014年1月1日到2019年12月31日。我的支票日期是8月2日。我希望该方法返回该范围内任何年份的任何8月2日的每个匹配的完整信息。因此,2014年将返回2014年8月2日星期六,然后是2015年8月2日星期日等
到目前为止,我一直在尝试使用Joda Time和Java中的默认日期/日历类来实现某些功能,我只是把自己弄得一团糟
谢谢,
编辑:我真傻,为没有添加我的代码而道歉:(
public static List<Date> getDaysInRange(Date startdate,
Date enddate,
Date checkDate) {
SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
List<Date> dates = new ArrayList<>();
Calendar cal = new GregorianCalendar();
cal.setTime(startdate);
while (cal.getTime().before(enddate)) {
if (sdf.format(cal.getTime()).equals(sdf.format(checkDate))) {
Date result = cal.getTime();
dates.add(result);
}
cal.add(Calendar.DATE, 1);
}
return dates;
}
# 1 楼答案
只约会
因为你只想要一个没有时间和时区的日期,所以使用一个只有日期的类。旧爪哇。util。日期/。日历类缺少这样的类。而那些旧的阶级是出了名的麻烦和缺陷
相反,请使用以下任一选项:
乔达时间
下面是一些使用Joda Time 2.6的未经测试的代码
其主要思想是关注一小部分可能的年份数字,而不是一年中的每一天进行测试。在下面的示例中,这意味着要比较六个日期时间值,而不是数千个。除了效率,代码的目的变得更加明显
例程的参数应该是一个月数和一个月中的一天数,一对整数或整数,而不是日期。如本例所示,有两个int变量,
month
和day
爪哇。时间
爪哇。time package还提供了一个
LocalDate
类。代码类似于上面的Joda Time示例# 2 楼答案
我认为使用SimpleDataFormat是个坏主意。直接使用日历进行比较,如下所示