public TypeValuePair evaluate( final FormulaContext context, final ParameterCallback parameters ) throws EvaluationException { if ( parameters.getParameterCount() != 3 ) { throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE ); } final TypeRegistry typeRegistry = context.getTypeRegistry(); final Number n1 = typeRegistry.convertToNumber( parameters.getType( 0 ), parameters.getValue( 0 ) ); final Number n2 = typeRegistry.convertToNumber( parameters.getType( 1 ), parameters.getValue( 1 ) ); final Number n3 = typeRegistry.convertToNumber( parameters.getType( 2 ), parameters.getValue( 2 ) ); if ( n1 == null || n2 == null || n3 == null ) { throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE ); } final LocalizationContext localizationContext = context .getLocalizationContext(); final java.sql.Date date = DateUtil.createDate( n1.intValue(), n2.intValue(), n3.intValue(), localizationContext ); return new TypeValuePair( DateTimeType.DATE_TYPE, date ); } }
public TypeValuePair evaluate(final FormulaContext context, final ParameterCallback parameters) throws EvaluationException { if (parameters.getParameterCount() != 3) { throw EvaluationException.getInstance(LibFormulaErrorValue.ERROR_ARGUMENTS_VALUE); } final TypeRegistry typeRegistry = context.getTypeRegistry(); final Number n1 = typeRegistry.convertToNumber(parameters.getType(0), parameters.getValue(0)); final Number n2 = typeRegistry.convertToNumber(parameters.getType(1), parameters.getValue(1)); final Number n3 = typeRegistry.convertToNumber(parameters.getType(2), parameters.getValue(2)); if (n1 == null || n2 == null || n3 == null) { throw EvaluationException.getInstance( LibFormulaErrorValue.ERROR_INVALID_ARGUMENT_VALUE); } final LocalizationContext localizationContext = context .getLocalizationContext(); final java.sql.Date date = DateUtil.createDate(n1.intValue(), n2.intValue(), n3.intValue(), localizationContext); return new TypeValuePair(DateTimeType.DATE_TYPE, date); } }
public void testDateConversion1900() { final FormulaContext context = getContext(); final Date januaryFirst1904 = DateUtil.createDate( 1904, 1, 1, context.getLocalizationContext() ); final Date januaryFirst1900 = DateUtil.createDate( 1900, 1, 1, context.getLocalizationContext() ); final Date marchFirst1904 = DateUtil.createDate( 1904, 3, 1, context.getLocalizationContext() ); final Date marchFirst1900 = DateUtil.createDate( 1900, 3, 1, context.getLocalizationContext() ); // these numbers must match whatever OpenOffice computes .. assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1900, false, HSSFDateUtil.computeZeroDate( "1900", false ) ), new BigDecimal( 0 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1900, false, HSSFDateUtil.computeZeroDate( "1900", false ) ), new BigDecimal( 59 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1904, false, HSSFDateUtil.computeZeroDate( "1900", false ) ), new BigDecimal( 1460 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1904, false, HSSFDateUtil.computeZeroDate( "1900", false ) ), new BigDecimal( 1520 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1900, true, HSSFDateUtil.computeZeroDate( "1900", true ) ), new BigDecimal( 0 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1900, true, HSSFDateUtil.computeZeroDate( "1900", true ) ), new BigDecimal( 60 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1904, true, HSSFDateUtil.computeZeroDate( "1900", true ) ), new BigDecimal( 1461 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1904, true, HSSFDateUtil.computeZeroDate( "1900", true ) ), new BigDecimal( 1521 ) ); }
public void testDateConversion1904() { final FormulaContext context = getContext(); final Date januaryFirst1904 = DateUtil.createDate( 1904, 1, 1, context.getLocalizationContext() ); final Date januaryFirst1900 = DateUtil.createDate( 1900, 1, 1, context.getLocalizationContext() ); final Date marchFirst1904 = DateUtil.createDate( 1904, 3, 1, context.getLocalizationContext() ); final Date marchFirst1900 = DateUtil.createDate( 1900, 3, 1, context.getLocalizationContext() ); // these numbers must match whatever OpenOffice computes .. assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1900, false, HSSFDateUtil.computeZeroDate( "1904", false ) ), new BigDecimal( -1460 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1900, false, HSSFDateUtil.computeZeroDate( "1904", false ) ), new BigDecimal( -1401 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1904, false, HSSFDateUtil.computeZeroDate( "1904", false ) ), new BigDecimal( 0 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1904, false, HSSFDateUtil.computeZeroDate( "1904", false ) ), new BigDecimal( 60 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1900, true, HSSFDateUtil.computeZeroDate( "1904", true ) ), new BigDecimal( -1461 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1900, true, HSSFDateUtil.computeZeroDate( "1904", true ) ), new BigDecimal( -1401 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1904, true, HSSFDateUtil.computeZeroDate( "1904", true ) ), new BigDecimal( 0 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1904, true, HSSFDateUtil.computeZeroDate( "1904", true ) ), new BigDecimal( 60 ) ); }
public void testDateConversion1899() { final FormulaContext context = getContext(); final Date januaryFirst1904 = DateUtil.createDate( 1904, 1, 1, context.getLocalizationContext() ); final Date januaryFirst1900 = DateUtil.createDate( 1900, 1, 1, context.getLocalizationContext() ); final Date marchFirst1904 = DateUtil.createDate( 1904, 3, 1, context.getLocalizationContext() ); final Date marchFirst1900 = DateUtil.createDate( 1900, 3, 1, context.getLocalizationContext() ); // these numbers must match whatever OpenOffice computes .. assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1900, false, HSSFDateUtil.computeZeroDate( "1899", false ) ), new BigDecimal( 2 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1900, false, HSSFDateUtil.computeZeroDate( "1899", false ) ), new BigDecimal( 61 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1904, false, HSSFDateUtil.computeZeroDate( "1899", false ) ), new BigDecimal( 1462 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1904, false, HSSFDateUtil.computeZeroDate( "1899", false ) ), new BigDecimal( 1522 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1900, true, HSSFDateUtil.computeZeroDate( "1899", true ) ), new BigDecimal( 2 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1900, true, HSSFDateUtil.computeZeroDate( "1899", true ) ), new BigDecimal( 62 ) ); assertEqual( HSSFDateUtil.getExcelDate( januaryFirst1904, true, HSSFDateUtil.computeZeroDate( "1899", true ) ), new BigDecimal( 1463 ) ); assertEqual( HSSFDateUtil.getExcelDate( marchFirst1904, true, HSSFDateUtil.computeZeroDate( "1899", true ) ), new BigDecimal( 1523 ) ); }