当前位置: 首页 > 知识库问答 >
问题:

如何在java中获取当前季度的第一个日期和最后一个日期。util。财政年度从8月开始的日期

赖诚
2023-03-14

我需要获取当前季度的第一个日期作为java.util.Date对象,当前季度的最后一个日期作为java.util.Date对象。

例如,我找到了提供季度信息的方法

LocalDate.now().get(IsoFields.QUARTER_OF_YEAR)

但前提是第一季度从1月份开始。

假设第一季度=8月、9月、10月
第二季度=11月、12月、1月
第三季度=2月、3月、4月
等等,有人能帮我得到第一个和最后一个日期吗。

共有1个答案

龙逸清
2023-03-14

好吧,我们要做的第一件事是编写一个方法,将给定日期调整为一个季度的开始。下面是一个示例,它采用当前日期和“一年”开始的月份(在您的情况下为8月):

public static LocalDate toStartDateOfQuarter(LocalDate now, Month start) {
    int minusMonths = (start.getValue() + now.getMonthValue() - 1) % 3;
    return now.withDayOfMonth(1).minusMonths(minusMonths);
}

我们可以这样使用它:

Month startMonth = Month.AUGUST;
LocalDate now = LocalDate.now();
LocalDate startOfQuarter = toStartDateOfQuarter(now, startMonth);
LocalDate endOfQuarter = YearMonth.from(startOfQuarter).plusMonths(2).atEndOfMonth();

这是一种不同的方法,但它抽象了季度开始日或季度结束日的实现。

public class QuarterAdjusterFactory {

    private final Month startOfYear;

    public QuarterAdjusterFactory(Month startOfYear) {
        this.startOfYear = startOfYear;
    }

    private int minusMonths(Temporal temporal) {
        return (startOfYear.getValue() + temporal.get(ChronoField.MONTH_OF_YEAR) - 1) % 3;
    }

    public TemporalAdjuster startOfQuarter() {
        return temporal -> temporal
            .with(ChronoField.DAY_OF_MONTH, 1)
            .minus(minusMonths(temporal), ChronoUnit.MONTHS);
    }

    public TemporalAdjuster endOfQuarter() {
        return temporal -> YearMonth.from(temporal)
            .minus(minusMonths(temporal) - 2, ChronoUnit.MONTHS)
            .atEndOfMonth();
    }
}

只需这样使用它:

QuarterAdjusterFactory factory = new QuarterAdjusterFactory(Month.AUGUST);
LocalDate start = date.with(factory.startOfQuarter());
LocalDate end = date.with(factory.endOfQuarter());
 类似资料:
  • 问题内容: 我需要获取 当前季度 的 第一个日期 作为java.util.Date对象,并获取 当前季度 的 最后一个日期 作为java.util.Date对象。 我正在使用以下方法获取本月的第一个日期和本月的最后一个日期。 有没有一种方法可以修改该功能以实现此目的,或者有人可以指出更好的方法吗? 假设第一季度= 1月2月3月,第二季度= 4月,5月,6月等。 问题答案: 这应该可以,但是我建议您

  • 我想根据月份对值进行分类,以便第一次过滤这些值 例如:-

  • 问题内容: 我正在尝试构造一个查询,该查询将映射两列,一列是表中的日期,第二列是别名,以显示日期所属的季度和财务年度。 不幸的是,我没有足够的SQL知识来知道从哪里开始。我知道,我会用的组合做到这一点,并却没有,我已经把已接近工作。 更复杂的是,澳大利亚的财政年度从7月1日至6月30日开始,因此2012财政年度的第一季度将从2012年7月1日开始。 我可以不用声明就可以做到这一点,但是我宁愿在声明

  • 问题内容: 我试图获取给定月份和年份的第一个日期和最后一个日期。我使用以下代码以yyyyMMdd格式获取最后日期。但是无法获得这种格式。另外,我希望开始日期采用相同的格式。我仍在努力。任何人都可以帮助我修复以下代码。 问题答案: 获取 开始日期 ( 注意 :在开始日期中, 日期 = 1) 对于格式化

  • 问题内容: 我正在尝试往返日期,该日期将有以前的日期,并且将有本月的第一个日期。一月份将会如此,依此类推。如何正确获取当月的第一个日期?我做不到。 问题答案: 尝试 更新(自Java 8以来 ):

  • 问题内容: 如何在where子句中使用下个月的第一天和最后一天? 问题答案: 采用: