2 * Copyright © 2013 Sebastian Hoß <mail@shoss.de>
3 * This work is free. You can redistribute it and/or modify it under the
4 * terms of the Do What The Fuck You Want To Public License, Version 2,
5 * as published by Sam Hocevar. See http://www.wtfpl.net/ for more details.
7 package com
.github
.sebhoss
.time
;
9 import java
.time
.LocalDate
;
10 import java
.time
.temporal
.ChronoField
;
12 final class FiscalDateImplementation
implements FiscalDate
{
14 private final FiscalDateCalculator fiscalDateCalculator
;
15 private final LocalDate currentCalendarDate
;
17 FiscalDateImplementation(final FiscalDateCalculator fiscalDateCalculator
, final LocalDate currentCalendarDate
) {
18 this.fiscalDateCalculator
= fiscalDateCalculator
;
19 this.currentCalendarDate
= currentCalendarDate
;
23 public long getFiscalYear() {
24 return fiscalDateCalculator
.calculateFiscalYear(currentCalendarDate
);
28 public long getFiscalMonth() {
29 return fiscalDateCalculator
.calculateFiscalMonth(currentCalendarDate
);
33 public long getFiscalDayOfYear() {
34 return fiscalDateCalculator
.calculateFiscalDayOfYear(currentCalendarDate
);
38 public long getFiscalWeekOfWeekyear() {
39 return fiscalDateCalculator
.calculateFiscalWeekOfYear(currentCalendarDate
);
43 public long getCalendarYear() {
44 return currentCalendarDate
.getYear();
48 public long getCalendarMonth() {
49 return currentCalendarDate
.getMonthValue();
53 public long getCalendarDayOfMonth() {
54 return currentCalendarDate
.getDayOfMonth();
58 public long getCalendarDayOfYear() {
59 return currentCalendarDate
.getDayOfYear();
63 public long getCalendarWeekOfWeekyear() {
64 return currentCalendarDate
.get(ChronoField
.ALIGNED_WEEK_OF_YEAR
);
68 public FiscalDate
plusYears(final long years
) {
69 return copyWithNewDate(currentCalendarDate
.plusYears(years
));
73 public FiscalDate
plusMonths(final long months
) {
74 return copyWithNewDate(currentCalendarDate
.plusMonths(months
));
78 public FiscalDate
plusWeeks(final long weeks
) {
79 return copyWithNewDate(currentCalendarDate
.plusWeeks(weeks
));
83 public FiscalDate
plusDays(final long days
) {
84 return copyWithNewDate(currentCalendarDate
.plusDays(days
));
88 public FiscalDate
minusYears(final long years
) {
89 return copyWithNewDate(currentCalendarDate
.minusYears(years
));
93 public FiscalDate
minusMonths(final long months
) {
94 return copyWithNewDate(currentCalendarDate
.minusMonths(months
));
98 public FiscalDate
minusWeeks(final long weeks
) {
99 return copyWithNewDate(currentCalendarDate
.minusWeeks(weeks
));
103 public FiscalDate
minusDays(final long days
) {
104 return copyWithNewDate(currentCalendarDate
.minusDays(days
));
107 private FiscalDateImplementation
copyWithNewDate(final LocalDate newDate
) {
108 return new FiscalDateImplementation(fiscalDateCalculator
, newDate
);
112 public LocalDate
asLocalDate() {
113 return currentCalendarDate
;