【发布时间】:2019-02-04 18:10:09
【问题描述】:
我正在尝试实现一种返回以下内容的方法:
- 当前季度日期
- 上一季度日期
- 当年
- 上一年
从 01/01 开始的典型年份,我能够通过以下方式弄清楚如何做到这一点:
//Current quarter start and end date
aCalendar.setTime(this.startdate);
aCalendar.set(Calendar.MONTH, aCalendar.get(Calendar.MONTH) / 3 * 3);
aCalendar.set(Calendar.DAY_OF_MONTH, 1);
this.quarterStartDate = aCalendar.getTime();
aCalendar.setTime(this.startdate);
aCalendar.set(Calendar.MONTH, aCalendar.get(Calendar.MONTH) / 3 * 3 + 2);
aCalendar.set(Calendar.DAY_OF_MONTH, aCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
this.quarterEndDate = aCalendar.getTime();
if (this.quarterEndDate.getTime() > currentCalendar.getTimeInMillis())
this.quarterEndDate = currentCalendar.getTime();
// previous quarter
aCalendar.setTime(this.startdate);
aCalendar.add(Calendar.MONTH, -3);
aCalendar.set(Calendar.MONTH, aCalendar.get(Calendar.MONTH) / 3 * 3 + 2);
aCalendar.set(Calendar.DAY_OF_MONTH, aCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
this.previousQuarterEndDate = aCalendar.getTime();
aCalendar.setTime(this.startdate);
aCalendar.add(Calendar.MONTH, -3);
aCalendar.set(Calendar.MONTH, aCalendar.get(Calendar.MONTH) / 3 * 3);
aCalendar.set(Calendar.DAY_OF_MONTH, 1);
this.previousQuarterStartDate = aCalendar.getTime();
// current year
aCalendar.setTime(this.startdate);
aCalendar.set(Calendar.MONTH, 11);
aCalendar.set(Calendar.DAY_OF_MONTH, 31);
this.currentYearEndDate = aCalendar.getTime();
if (this.currentYearEndDate.getTime() > currentCalendar.getTimeInMillis())
this.currentYearEndDate = currentCalendar.getTime();
aCalendar.setTime(this.startdate);
aCalendar.set(Calendar.MONTH, 0);
aCalendar.set(Calendar.DAY_OF_MONTH, 1);
this.currentYearStartDate = aCalendar.getTime();
// previous year
aCalendar.setTime(this.currentYearEndDate);
aCalendar.set(Calendar.YEAR, aCalendar.get(Calendar.YEAR) - 1);
aCalendar.set(Calendar.MONTH, 11); //
aCalendar.set(Calendar.DAY_OF_MONTH, 31);
this.previousYearEndDate = aCalendar.getTime();
aCalendar.setTime(this.currentYearStartDate);
aCalendar.set(Calendar.YEAR, aCalendar.get(Calendar.YEAR) - 1);
aCalendar.set(Calendar.MONTH, 0); //
aCalendar.set(Calendar.DAY_OF_MONTH, 1);
this.previousYearStartDate = aCalendar.getTime();
但是,我要解决的是,如果一年的开始日期与季度不同,例如 2018 年 3 月 1 日,那么
**Q1** = 03/01/2018 -05/31/2018 **Q2** = 06/01/2018- 08/30/2018 **Q3** = 09/01/2018 - 11/30/2018 **Q4** = 12/01/2018 - 02/28/2019
我的问题是如何返回当前/上一季度和年度的开始和结束日期。例如,假设今天的日期是 10/19/2018 应该返回以下内容:
- 当前季度:Start_Date = 9/1/2018 End_Date = 10/19/2018
- 上一季度:Start_Date = 6/1/2018 End_Date = 8/30/2018
- 当年:Start_Date = 3/1/2018 End_Date = 10/19/2018
- 上一年:Start_Date = 3/12017 End_Date = 2/28/2018
【问题讨论】:
-
我建议你不要使用
Calendar。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的LocalDate。 -
这真的是复制品吗?我看不出链接问题的三个答案中的任何一个如何考虑到这一年可能不会从 1 月 1 日开始。@mocodes,你有意见吗?