|
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.
|
|
From: <ma...@us...> - 2006-09-15 06:29:18
|
Revision: 180
http://svn.sourceforge.net/objectlabkit/?rev=180&view=rev
Author: marchy
Date: 2006-09-14 23:29:03 -0700 (Thu, 14 Sep 2006)
Log Message:
-----------
fixed the prob with ACT_ACT test failing
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-14 20:28:58 UTC (rev 179)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarPeriodCountCalculator.java 2006-09-15 06:29:03 UTC (rev 180)
@@ -106,8 +106,8 @@
final int diff1 = dayDiff(start, endOfStartYear);
final int diff2 = dayDiff(startOfEndYear, end);
- diff = (diff1 + 1.0) / start.getMaximum(Calendar.DAY_OF_YEAR) + (endYear - startYear - 1.0) + (diff2)
- / (double) end.getMaximum(Calendar.DAY_OF_YEAR);
+ diff = (diff1 + 1.0) / start.getActualMaximum(Calendar.DAY_OF_YEAR) + (endYear - startYear - 1.0) + (diff2)
+ / (double) end.getActualMaximum(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.
|
|
From: <ma...@us...> - 2006-09-15 06:54:02
|
Revision: 182
http://svn.sourceforge.net/objectlabkit/?rev=182&view=rev
Author: marchy
Date: 2006-09-14 23:53:50 -0700 (Thu, 14 Sep 2006)
Log Message:
-----------
fixed the problem with the 30/31 days... on to the standardizing the timezone - local vs. UTC
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-15 06:30:38 UTC (rev 181)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarPeriodCountCalculator.java 2006-09-15 06:53:50 UTC (rev 182)
@@ -85,7 +85,7 @@
private int dayDiff(final Calendar start, final Calendar end) {
final long diff = Math.abs(start.getTimeInMillis() - end.getTimeInMillis());
final double dayDiff = ((double) diff) / MILLIS_IN_DAY;
- return (int) (dayDiff);
+ return (int) Math.round(dayDiff);
}
public double monthDiff(final Calendar start, final Calendar end, final PeriodCountBasis basis) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|