当前位置: 首页 > 面试题库 >

2个java.util.Date之间的月数,不包括一个月中的某天

苏边浩
2023-03-14
问题内容

我想要2到2之间的java.util.Date月数,但不计算月份中的天数。所以我只想比较年和月。

例:

 monthsBetween(new Date(2012,01,28), new Date(2012,02,01)) ---> 1

 monthsBetween(new Date(2012,02,27), new Date(2012,02,28)) ---> 0

 monthsBetween(new Date(2012,03,28), new Date(2012,07,01)) ---> 4

我已经使用Joda-time尝试过此操作(返回0,预期为1):

private static int monthsBetween(final Date fromDate, final Date toDate) {
    DateTime date1 = new DateTime().withDate(2012, 1, 20);
    DateTime date2 = new DateTime().withDate(2012, 2, 13);
    PeriodType monthDay = PeriodType.yearDayTime().withDaysRemoved();
    Period difference = new Period(date1, date2, monthDay);
    int months = difference.getMonths();

    return months;
 }

而且,这(使用相同结果)使用Joda-time:

private static int monthsBetween(final Date fromDate, final Date toDate) {
        return Months.monthsBetween(new DateTime(fromDate), new   DateTime(toDate).getMonths();
    }

我该怎么做?


问题答案:

您要求的是整个月的数量-这与说“忽略月份中的一天部分”不同。

首先,我建议使用LocalDate代替DateTime进行计算。理想情况下,不要使用java.util.Date任何内容,并从输入内容LocalDate开始(例如,直接解析文本或输入数据的来源)。在两个日期中将月份的天数均设置为1,
然后 取差值在几个月内:

private static int monthsBetweenIgnoreDays(LocalDate start, LocalDate end) {
    start = start.withDayOfMonth(1);
    end = end.withDayOfMonth(1);
    return Months.monthsBetween(start, end).getMonths();
}


 类似资料:
  • 问题内容: 该查询仅显示现有月份的结果。我需要所有12个月的销售。 输出 : 所需输出 : 问题答案: 感谢@pankaj提示,在这里我通过此查询解决了…

  • 我有两次约会。一个是以YYYYMMDD格式从其他应用程序的表中检索的,第二个日期是本地时间,我需要这两个日期之间的天数/月/年。 我试过了 但这给了我一些乱七八糟的数字。 变量$t=Fri Dec31 00:00:00 9999 变量$今天=Wed Feb19 14:40:55 2020 产出:25182094888 有什么想法吗?提前谢谢。

  • 我发现一个奇怪的结果,当我使用扩散数月的拉维碳。谁能为我解释一下为什么它是这样工作的。是虫子吗?以及如何使其正确。 产量为: 0(预期: 1) 但是 产出为:1 这个奇怪的结果只发生在2月1日到3月1日之间,其他月份的结果也是意料之中的。 我也尝试而不是 它返回月份:0,天数:28(不是预期的月份:1,天数:0) 所以问题可能来自PHP,而不是Carbon。

  • 在Netezza中,我们有一个months_-between函数,它给出两个日期之间的月份:我猜,它首先计算日期之间的天数,然后除以30? 有没有一种方法可以在netezza中编写sql,这样我就可以得到如下整数值:如果两个日期在同一个月内,则返回0。否则返回#个月。i、 e 2015年8月31日和2015年9月01日应返回1,因为它们在不同的月份。 如果我将months_between的o/p转

  • 问题内容: 我正在尝试计算表中的记录,并按日期将它们分组。我当前的查询如下所示: 这行得通,除了我还要数月不存在任何记录的计数。 谁能提供有关如何实现此目标的建议/建议? 问题答案: 在MySQL中执行此操作的最简单方法是创建一个名为的表,该表列出了您感兴趣的所有月份,并在表中使用LEFT JOIN。 但是,由于这主要是一个表示问题,因此通常很容易在您已经在运行的情况下运行查询并在客户端(例如PH

  • 问题内容: 它给出以下内容: 但是我想获得下个月的定义,该怎么办? 问题答案: 表达方式 给。我们期望这两个值都指向每月的最后几天。如果将1天添加到值中,我们将获得下个月的第一天, 会给我们1个月的预期时间。因此,让我们检查是否有一个月的最后两天,在这种情况下,我们要返回第二天的年龄间隔。在其他情况下,我们将返回原始值的年龄间隔: 一些例子: