]> source.dussan.org Git - poi.git/commitdiff
Implementation of the Day function from Pavel Krupets
authorNick Burch <nick@apache.org>
Mon, 17 Sep 2007 15:58:54 +0000 (15:58 +0000)
committerNick Burch <nick@apache.org>
Mon, 17 Sep 2007 15:58:54 +0000 (15:58 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@576492 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Day.java

index 7ffb1aff4d71bc9f7e5be5f0011f27b033b36367..283633442e936db754c9a99e7682bf4c20a28944 100644 (file)
 * 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;
+    }
 }