Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定Java中两天之间每天发生多少次_Java - Fatal编程技术网

确定Java中两天之间每天发生多少次

确定Java中两天之间每天发生多少次,java,Java,我需要计算两个日期之间每天发生多少次,可以是每周或每月 例如每月: 起始日期:2019/01/29 截止日期:2019/03/28 考虑到上面的例子,输出应该是1,因为这不是闰年,2月28日,也是3月28日 int recordCountMonths = (int) ChronoUnit.MONTHS.between(scheduleStartDate, scheduleEndDate); int recordCountWeeks = (int) ChronoUnit.WEEKS.betwee

我需要计算两个日期之间每天发生多少次,可以是每周或每月

例如每月: 起始日期:2019/01/29 截止日期:2019/03/28

考虑到上面的例子,输出应该是1,因为这不是闰年,2月28日,也是3月28日

int recordCountMonths = (int) ChronoUnit.MONTHS.between(scheduleStartDate, scheduleEndDate);

int recordCountWeeks = (int) ChronoUnit.WEEKS.between(scheduleStartDate, scheduleEndDate);
Exmaple 1 如果我的日期介于以下日期之间,则“月”实现会给我2(考虑到闰年,它应该返回3):

 LocalDate startDate = LocalDate.of(2020, Month.JANUARY, 29);

LocalDate endDate = LocalDate.of(2020, Month.APRIL, 28);
  LocalDate startDate = LocalDate.of(2019, Month.JANUARY, 31);

    LocalDate endDate = LocalDate.of(2019, Month.MAY, 28);
例2: 如果我的日期介于以下日期之间,则“月实施”将给我3个月(它应返回2个,考虑到31个仅发生在1月和3月):

 LocalDate startDate = LocalDate.of(2020, Month.JANUARY, 29);

LocalDate endDate = LocalDate.of(2020, Month.APRIL, 28);
  LocalDate startDate = LocalDate.of(2019, Month.JANUARY, 31);

    LocalDate endDate = LocalDate.of(2019, Month.MAY, 28);
此外,也可以要求上述计数每周计算一次。在这种情况下,计数会更多。然而,现在我们不要把重点放在每周

我想不出一个简单的方法来做到这一点


我尝试了不同的方法,但结果不准确。

正如承诺的那样,这里有一种方法可以解决您的问题。这可能更好,但这应该足够有效。你可以为其他特定的病例制作类似的计数方法,比如你想用周做什么

/**
 * Returns the count of the day of the start day of the month between start and end inclusively.
 */
public static int getCountOfDayOfMonthBetween(LocalDate start, LocalDate end) {
    // the target day of the month to count
    final int dom = start.getDayOfMonth();

    // 'start' is counted as a valid day
    int count = 1;
    LocalDate currDate = start.plusMonths(1);
    while (!currDate.isAfter(end)) {
        try {
            currDate = currDate.withDayOfMonth(dom);
            // day of month changed, so check that the date is still valid
            if (currDate.isAfter(end)) {
                return count;
            } else {
                count++;
            }
        } catch (DateTimeException e) {
        }
        currDate = currDate.plusMonths(1);
    }
    return count;
}


public static void main(String[] args) {
    LocalDate start1 = LocalDate.of(2020, Month.JANUARY, 29);
    LocalDate end1 = LocalDate.of(2020, Month.APRIL, 28);
    System.out.println(getCountOfDayOfMonthBetween(start1, end1)); // 3

    LocalDate start2 = LocalDate.of(2019, Month.JANUARY, 31);
    LocalDate end2 = LocalDate.of(2019, Month.MAY, 28);
    System.out.println(getCountOfDayOfMonthBetween(start2, end2)); // 2
}

请发布给你不准确结果的代码。我很难理解你的问题。你是否在问如何计算两个日期之间的月(或周)?你是指整月(或几周)还是部分?我已经用code
ChronoUnit更新了我的问题。between
并不像你想象的那样。阅读它的文档。你想知道一个月中有多少次发生在两个日期之间,对吗
between
不能这样做,它只告诉您这两个日期之间的完整时间单位。这是正确的。我正在考虑一个更好的方法,而不是围绕月份和年份有复杂的逻辑。我运行了你以前的实现,所以如果我考虑1月31日2019到5月31日2019,这仍然给我4的计数。这应该让我数到2了。我已经对您的代码进行了一些更新,以获得所需的输出。看看我的评论below@LifeStartsAtHelloWorld再次编辑。我想现在应该好了。如果这回答了你的问题,那么请接受作为答案。谢谢