diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Day.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Day.java index 7ffb1aff4..283633442 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Day.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Day.java @@ -14,12 +14,51 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* - * Created on May 15, 2005 - * - */ package org.apache.poi.hssf.record.formula.functions; -public class Day extends NotImplementedFunction { +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; +import org.apache.poi.hssf.record.formula.eval.BlankEval; +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.NumericValueEval; + +/** + * @author Pavel Krupets + */ +public class Day extends NumericFunction { + /** + * @see org.apache.poi.hssf.record.formula.functions.Function#evaluate(org.apache.poi.hssf.record.formula.eval.Eval[], int, short) + */ + public Eval evaluate(Eval[] operands, int srcCellRow, short +srcCellCol) { + ValueEval retval = null; + + switch (operands.length) { + default: + retval = ErrorEval.VALUE_INVALID; + break; + case 1: + ValueEval ve = singleOperandEvaluate(operands[0], +srcCellRow, srcCellCol); + if (ve instanceof NumericValueEval) { + NumericValueEval ne = (NumericValueEval) ve; + if (HSSFDateUtil.isValidExcelDate(ne.getNumberValue())) { + java.util.Date d = HSSFDateUtil.getJavaDate(ne.getNumberValue()); + java.util.Calendar c = java.util.Calendar.getInstance(); + c.setTime(d); + retval = new NumberEval(c.get(java.util.Calendar.DAY_OF_MONTH)); + } else { + retval = ErrorEval.NUM_ERROR; + } + } else if (ve instanceof BlankEval) { + // do nothing + } else { + retval = ErrorEval.NUM_ERROR; + } + } + return retval; + } }