forked from plusone/plusone-commons
添加计算方法。
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package xyz.zhouxy.plusone.commons.time;
|
||||
|
||||
import static java.time.temporal.ChronoField.YEAR;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDate;
|
||||
import java.time.Month;
|
||||
@@ -29,6 +31,14 @@ public final class YearQuarter implements Comparable<YearQuarter>, Serializable
|
||||
/** 季度结束日期 */
|
||||
private final LocalDate lastDate;
|
||||
|
||||
private YearQuarter(int year, int quarter) {
|
||||
Preconditions.checkNotNull(quarter, "Quarter can not be null.");
|
||||
this.year = year;
|
||||
this.quarter = Quarter.of(quarter);
|
||||
this.firstDate = this.quarter.firstMonthDay().atYear(year);
|
||||
this.lastDate = this.quarter.lastMonthDay().atYear(year);
|
||||
}
|
||||
|
||||
private YearQuarter(int year, @Nonnull Quarter quarter) {
|
||||
Preconditions.checkNotNull(quarter, "Quarter can not be null.");
|
||||
this.year = year;
|
||||
@@ -136,6 +146,37 @@ public final class YearQuarter implements Comparable<YearQuarter>, Serializable
|
||||
|
||||
// Getters end
|
||||
|
||||
// computes
|
||||
|
||||
public YearQuarter plusQuarters(long quartersToAdd) { // TODO 单元测试
|
||||
if (quartersToAdd == 0) {
|
||||
return this;
|
||||
}
|
||||
long quarterCount = this.year * 4L + (this.quarter.getValue() - 1);
|
||||
long calcQuarters = quarterCount + quartersToAdd; // safe overflow
|
||||
int newYear = YEAR.checkValidIntValue(Math.floorDiv(calcQuarters, 4));
|
||||
int newQuarter = (int) Math.floorMod(calcQuarters, 4) + 1;
|
||||
return of(newYear, Quarter.of(newQuarter));
|
||||
}
|
||||
|
||||
public YearQuarter minusQuarters(long quartersToAdd) { // TODO 单元测试
|
||||
return plusQuarters(-quartersToAdd);
|
||||
}
|
||||
|
||||
public YearQuarter plusYears(long yearsToAdd) { // TODO 单元测试
|
||||
if (yearsToAdd == 0) {
|
||||
return this;
|
||||
}
|
||||
int newYear = YEAR.checkValidIntValue(this.year + yearsToAdd); // safe overflow
|
||||
return of(newYear, this.quarter);
|
||||
}
|
||||
|
||||
public YearQuarter minusYears(long yearsToAdd) {
|
||||
return plusYears(-yearsToAdd);
|
||||
}
|
||||
|
||||
// computes end
|
||||
|
||||
// hashCode & equals
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user