diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
index 166c884..eb6978a 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
@@ -123,22 +123,22 @@ public class BillCycleDayCalculator {
private static final class CalculatedBillCycleDay implements BillCycleDay {
- private final DateTime bcdTimeUTC;
+ private final DateTime bcdTime;
private final DateTimeZone accountTimeZone;
- private CalculatedBillCycleDay(final DateTimeZone accountTimeZone, final DateTime bcdTimeUTC) {
+ private CalculatedBillCycleDay(final DateTimeZone accountTimeZone, final DateTime bcdTime) {
this.accountTimeZone = accountTimeZone;
- this.bcdTimeUTC = bcdTimeUTC;
+ this.bcdTime = bcdTime;
}
@Override
public int getDayOfMonthUTC() {
- return bcdTimeUTC.getDayOfMonth();
+ return bcdTime.toDateTime(DateTimeZone.UTC).getDayOfMonth();
}
@Override
public int getDayOfMonthLocal() {
- return bcdTimeUTC.toDateTime(accountTimeZone).getDayOfMonth();
+ return bcdTime.toDateTime(accountTimeZone).getDayOfMonth();
}
}
}
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
index 1e3104d..8bc0293 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
@@ -82,6 +82,17 @@ public class TestBillCycleDayCalculator {
verifyBCDCalculation(accountTimeZone, startDateUTC, bcdUTC, bcdLocal);
}
+ @Test(groups = "fast")
+ public void testCalculateBCDWithSubscriptionDateNotInUTC() throws Exception {
+ // Test to verify the computations don't rely implicitly on UTC
+ final DateTimeZone accountTimeZone = DateTimeZone.forID("Asia/Tokyo");
+ final DateTime startDate = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.forID("HST"));
+ final int bcdUTC = 16;
+ final int bcdLocal = 17;
+
+ verifyBCDCalculation(accountTimeZone, startDate, bcdUTC, bcdLocal);
+ }
+
private void verifyBCDCalculation(final DateTimeZone accountTimeZone, final DateTime startDateUTC, final int bcdUTC, final int bcdLocal) throws AccountApiException {
final BillCycleDayCalculator billCycleDayCalculator = new BillCycleDayCalculator(Mockito.mock(CatalogService.class), Mockito.mock(EntitlementUserApi.class));