|
From: <ma...@us...> - 2006-09-02 14:19:30
|
Revision: 80
http://svn.sourceforge.net/objectlabkit/?rev=80&view=rev
Author: marchy
Date: 2006-09-02 07:19:20 -0700 (Sat, 02 Sep 2006)
Log Message:
-----------
diffing correctly between 2 dates. all tests pass - finally ;)
Modified Paths:
--------------
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarPeriodCountCalculator.java
Modified: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarPeriodCountCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarPeriodCountCalculator.java 2006-09-02 13:59:52 UTC (rev 79)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarPeriodCountCalculator.java 2006-09-02 14:19:20 UTC (rev 80)
@@ -32,6 +32,8 @@
*/
public class CalendarPeriodCountCalculator implements PeriodCountCalculator<Calendar> {
+ private double MILLIS_IN_DAY = 1000 * 60 * 60 * 24;
+
public int dayDiff(final Calendar start, final Calendar end, final PeriodCountBasis basis) {
int diff = 0;
@@ -74,14 +76,16 @@
diff = (end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * YEAR_360 + (end.get(Calendar.MONTH) - start.get(Calendar.MONTH)) * MONTH_30_DAYS
+ dayEnd - dayStart;
} else {
- // TODO implement this
- diff = 0;
-// final Period p = new Period(start, end, PeriodType.days());
-// diff = p.getDays();
+ diff = dayDiff(start, end);
}
return diff;
}
+ private int dayDiff(final Calendar start, final Calendar end) {
+ // TODO the 12 hours is just for safety - in case DST kicked in, but is there a better way?
+ return (int)((Math.abs(start.getTime().getTime() - end.getTime().getTime()) + 12) / MILLIS_IN_DAY);
+ }
+
public double monthDiff(final Calendar start, final Calendar end, final PeriodCountBasis basis) {
return yearDiff(start, end, basis) * MONTHS_IN_YEAR;
}
@@ -97,15 +101,11 @@
final Calendar startOfEndYear = (Calendar) end.clone();
startOfEndYear.set(Calendar.DAY_OF_YEAR, startOfEndYear.getActualMinimum(Calendar.DAY_OF_YEAR));
- Calendar c1 = Calendar.getInstance();
- c1.clone();
+ final int diff1 = dayDiff(start, endOfStartYear);
+ final int diff2 = dayDiff(startOfEndYear, end);
- // TODO implement this
- diff = 0;
-// final int diff1 = new Period(start, endOfStartYear, PeriodType.days()).getDays();
-// final int diff2 = new Period(startOfEndYear, end, PeriodType.days()).getDays();
-// diff = (diff1 + 1.0) / start.dayOfYear().getMaximumValue() + (endYear - startYear - 1.0) + (diff2)
-// / (double) end.dayOfYear().getMaximumValue();
+ diff = (diff1 + 1.0) / start.getMaximum(Calendar.DAY_OF_YEAR) + (endYear - startYear - 1.0) + (diff2)
+ / (double) end.getMaximum(Calendar.DAY_OF_YEAR);
}
} else if (basis == PeriodCountBasis.CONV_30_360 || basis == PeriodCountBasis.CONV_360E_ISDA
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|