有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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;
}

共 (2) 个答案

  1. # 1 楼答案

    只约会

    因为你只想要一个没有时间和时区的日期,所以使用一个只有日期的类。旧爪哇。util。日期/。日历类缺少这样的类。而那些旧的阶级是出了名的麻烦和缺陷

    相反,请使用以下任一选项:

    乔达时间

    下面是一些使用Joda Time 2.6的未经测试的代码

    其主要思想是关注一小部分可能的年份数字,而不是一年中的每一天进行测试。在下面的示例中,这意味着要比较六个日期时间值,而不是数千个。除了效率,代码的目的变得更加明显

    例程的参数应该是一个月数和一个月中的一天数,一对整数或整数,而不是日期。如本例所示,有两个int变量,monthday

    LocalDate start = new LocalDate( 2011, 2, 3 );
    LocalDate stop = new LocalDate( 2016, 4, 5 );
    int yearStart = start.getYear();
    int yearStop = stop.getYear();
    int month = 11;
    int day = 22;
    
    for ( i = yearStart, i <= yearStop, i++ ) 
    {
        LocalDate x = new LocalDate( i, month, day );
        boolean matchStart = ( x.isEqual( start ) || x.isAfter( start ) );
        boolean matchStop = x.isBefore( stop ); // Half-Open approach where beginning of range is inclusive while ending is exclusive.
        if ( matchStart && matchStop ) 
        {
            // Add to collection of LocalDate objects.
            // Later you can ask each LocalDate object for its day-of-week.
        {
    }
    

    爪哇。时间

    爪哇。time package还提供了一个LocalDate类。代码类似于上面的Joda Time示例

  2. # 2 楼答案

    我认为使用SimpleDataFormat是个坏主意。直接使用日历进行比较,如下所示

    cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH) && cal1.get(Calendar.DAY_OF_MONTH) == cal2.get(Calendar.DAY_OF_MONTH)