com.jrefinery.date
Class SerialDateUtilities

java.lang.Object
  extended by com.jrefinery.date.SerialDateUtilities

public class SerialDateUtilities
extends java.lang.Object

A utility class that provides a number of useful methods (some static). Many of these are used in the implementation of the day-count convention classes. I recognise some limitations in this implementation: [1] some of the methods assume that the default Calendar is a GregorianCalendar (used mostly to determine leap years) - so the code won't work if some other Calendar is the default. I'm not sure how to handle this properly? [2] a whole bunch of static methods isn't very object-oriented - but I couldn't think of a good way to extend the Date and Calendar classes to add the functions I required, so static methods are doing the job for now.


Field Summary
protected  java.text.DateFormatSymbols dateFormatSymbols
          The default date format symbols;
protected  java.lang.String[] months
          Strings representing the months;
protected  java.lang.String[] weekdays
          Strings representing the weekdays;
 
Constructor Summary
SerialDateUtilities()
          Constructor.
 
Method Summary
static int countFeb29s(SerialDate start, SerialDate end)
          Returns the number of times that February 29 falls within the specified date range.
static int dayCount30(SerialDate start, SerialDate end)
          Returns the number of days between the specified start and end dates, assuming that there are thirty days in every month (that is, corresponding to the 30/360 day-count convention).
static int dayCount30E(SerialDate start, SerialDate end)
          Returns the number of days between the specified start and end dates, assuming that there are thirty days in every month, and applying the European adjustment (i.e.
static int dayCount30ISDA(SerialDate start, SerialDate end)
          Returns the number of days between the specified start and end dates, assuming that there are thirty days in every month, and applying the ISDA adjustments (i.e.
static int dayCount30PSA(SerialDate start, SerialDate end)
          Returns the number of days between the specified start and end dates, assuming that there are thirty days in every month, and applying the PSA adjustments (i.e.
static int dayCountActual(SerialDate start, SerialDate end)
          Returns the actual number of days between two dates.
 java.lang.String[] getMonths()
          Returns an array of strings representing the months.
 java.lang.String[] getWeekdays()
          Returns an array of strings representing the days-of-the-week.
static boolean isLastDayOfFebruary(SerialDate d)
          Returns true if the specified date is the last day in February (i.e.
 int stringToWeekday(java.lang.String s)
          Converts the specified string to a weekday, using the default locale.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

dateFormatSymbols

protected java.text.DateFormatSymbols dateFormatSymbols
The default date format symbols;


weekdays

protected java.lang.String[] weekdays
Strings representing the weekdays;


months

protected java.lang.String[] months
Strings representing the months;

Constructor Detail

SerialDateUtilities

public SerialDateUtilities()
Constructor.

Method Detail

getWeekdays

public java.lang.String[] getWeekdays()
Returns an array of strings representing the days-of-the-week.

Returns:
An array of strings representing the days-of-the-week;

getMonths

public java.lang.String[] getMonths()
Returns an array of strings representing the months.

Returns:
An array of strings representing the months;

stringToWeekday

public int stringToWeekday(java.lang.String s)
Converts the specified string to a weekday, using the default locale.

Parameters:
s - A string representing the day-of-the-week;
Returns:
An integer representing the day-of-the-week;

dayCountActual

public static int dayCountActual(SerialDate start,
                                 SerialDate end)
Returns the actual number of days between two dates.

Parameters:
start - The start date;
end - The end date;

dayCount30

public static int dayCount30(SerialDate start,
                             SerialDate end)
Returns the number of days between the specified start and end dates, assuming that there are thirty days in every month (that is, corresponding to the 30/360 day-count convention).

The method handles cases where the start date is before the end date (by switching the dates and returning a negative result).

Parameters:
start - The start date;
end - The end date;

dayCount30ISDA

public static int dayCount30ISDA(SerialDate start,
                                 SerialDate end)
Returns the number of days between the specified start and end dates, assuming that there are thirty days in every month, and applying the ISDA adjustments (i.e. corresponding to the 30/360 (ISDA) day-count convention).

The method handles cases where the start date is before the end date (by switching the dates around and returning a negative result).

Parameters:
start - The start date;
end - The end date;

dayCount30PSA

public static int dayCount30PSA(SerialDate start,
                                SerialDate end)
Returns the number of days between the specified start and end dates, assuming that there are thirty days in every month, and applying the PSA adjustments (i.e. corresponding to the 30/360 (PSA) day-count convention. The method handles cases where the start date is before the end date (by switching the dates around and returning a negative result).

Parameters:
start - The start date;
end - The end date;

dayCount30E

public static int dayCount30E(SerialDate start,
                              SerialDate end)
Returns the number of days between the specified start and end dates, assuming that there are thirty days in every month, and applying the European adjustment (i.e. corresponds to the 30E/360 day-count convention).

The method handles cases where the start date is before the end date (by switching the dates around and returning a negative result).

Parameters:
start - The start date;
end - The end date;

isLastDayOfFebruary

public static boolean isLastDayOfFebruary(SerialDate d)
Returns true if the specified date is the last day in February (i.e. the 28th in non-leap years, and the 29th in leap years).

Parameters:
d - The date to be tested;
Returns:
A boolean that indicates whether or not the specified date is the last day of February;

countFeb29s

public static int countFeb29s(SerialDate start,
                              SerialDate end)
Returns the number of times that February 29 falls within the specified date range. The result needs to correspond to the ACT/365 (Japanese) day-count convention. The difficult cases are where the start or the end date is Feb 29 (include or not?). Need to find out how JGBs do this (since this is where the ACT/365 (Japanese) convention comes from...

Parameters:
start - The start date;
end - The end date;
Returns:
The number of times that February 29 occurs within the date range;


Copyright © 2003 MBARI.

The Monterey Bay Aquarium Research Institute (MBARI) provides this documentation and code "as is", with no warranty, express or implied, of its quality or consistency. It is provided without support and without obligation on the part of MBARI to assist in its use, correction, modification, or enhancement.