long days = computeDays(parameters, typeRegistry);
if (DateDifFunction.DAYS_CODE.equals(formatCode))
{
return new TypeValuePair(NumberType.GENERIC_NUMBER, new BigDecimal(days));
}
final Date date1 = typeRegistry.convertToDate(parameters.getType(0), parameters.getValue(0));
final Date date2 = typeRegistry.convertToDate(parameters.getType(1), parameters.getValue(1));
if (date1 == null || date2 == null)
{
throw EvaluationException.getInstance(LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE);
}
final LocalizationContext localizationContext = context.getLocalizationContext();
final TimeZone timeZone = localizationContext.getTimeZone();
final Locale locale = localizationContext.getLocale();
final GregorianCalendar calandar1 = new GregorianCalendar(timeZone, locale);
calandar1.setTime(min(date1, date2));
final GregorianCalendar calandar2 = new GregorianCalendar(timeZone, locale);
calandar2.setTime(max(date1, date2));
int sign = (date1.getTime() < date2.getTime()) ? 1 : -1;
final long res = sign * computeDateDifference(formatCode, calandar1, calandar2, days);
return new TypeValuePair(NumberType.GENERIC_NUMBER, new BigDecimal(res));
}