public static bool isLastDayOfFebruary(SerialDate d) { if (d.getMonth() != 2) return false; int dayOfMonth = d.getDayOfMonth(); if (SerialDate.isLeapYear(d.getYYYY())) return dayOfMonth == 29; else return dayOfMonth == 28; }
public static int dayCount30(SerialDate start, SerialDate end) { if (!start.isBefore(end)) return -SerialDateUtilities.dayCount30(end, start); int dayOfMonth1 = start.getDayOfMonth(); int month1 = start.getMonth(); int yyyy = start.getYYYY(); int dayOfMonth2 = end.getDayOfMonth(); int month2 = end.getMonth(); return 360 * (end.getYYYY() - yyyy) + 30 * (month2 - month1) + (dayOfMonth2 - dayOfMonth1); }
public static int dayCount30ISDA(SerialDate start, SerialDate end) { if (start.isBefore(end)) { int num1 = start.getDayOfMonth(); int month1 = start.getMonth(); int yyyy1 = start.getYYYY(); if (num1 == 31) num1 = 30; int num2 = end.getDayOfMonth(); int month2 = end.getMonth(); int yyyy2 = end.getYYYY(); if (num2 == 31 && num1 == 30) num2 = 30; return 360 * (yyyy2 - yyyy1) + 30 * (month2 - month1) + (num2 - num1); } else if (start.isAfter(end)) return -SerialDateUtilities.dayCount30ISDA(end, start); else return 0; }
public static int dayCount30PSA(SerialDate start, SerialDate end) { if (!start.isOnOrBefore(end)) return -SerialDateUtilities.dayCount30PSA(end, start); int num1 = start.getDayOfMonth(); int month1 = start.getMonth(); int yyyy1 = start.getYYYY(); if (SerialDateUtilities.isLastDayOfFebruary(start)) num1 = 30; if (num1 == 31 || SerialDateUtilities.isLastDayOfFebruary(start)) num1 = 30; int num2 = end.getDayOfMonth(); int month2 = end.getMonth(); int yyyy2 = end.getYYYY(); if (num2 == 31 && num1 == 30) num2 = 30; return 360 * (yyyy2 - yyyy1) + 30 * (month2 - month1) + (num2 - num1); }