Revision 44761 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/date/ToDateFunction.java

View differences:

ToDateFunction.java
1 1
package org.gvsig.expressionevaluator.impl.function.date;
2 2

  
3
import java.text.ParseException;
4 3
import java.text.SimpleDateFormat;
5 4
import java.util.Date;
5
import java.util.Locale;
6 6
import org.apache.commons.lang3.Range;
7 7
import org.gvsig.expressionevaluator.Interpreter;
8 8
import org.gvsig.expressionevaluator.spi.AbstractFunction;
9 9
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TO_DATE;
10
import org.gvsig.tools.ToolsLocator;
11
import org.gvsig.tools.dataTypes.DataTypes;
10 12

  
13
@SuppressWarnings("UseSpecificCatch")
11 14
public class ToDateFunction extends AbstractFunction {
12 15

  
13 16
    public ToDateFunction() {
14
        super("Date", FUNCTION_TO_DATE,Range.is(2),
17
        super("Date", FUNCTION_TO_DATE,Range.between(2,3),
15 18
            "Returns a date from the arguments",
16 19
            FUNCTION_TO_DATE+"({{date}}, format)",
17 20
            new String[]{
18 21
                "date - a string with a date",
19 22
                "format - Format to use to parse the date"
20 23
            },
21
            "Date"
24
            "Date",
25
            true
22 26
        );
23 27
    }
24 28

  
......
30 34
    @Override
31 35
    public Object call(Interpreter interpreter, Object[] args) {
32 36
        Object date_obj = getObject(args, 0);
33
        if( date_obj instanceof Date ) {
34
            Date x = new Date(((Date) date_obj).getTime());
35
            x.setHours(0);
36
            x.setMinutes(0);
37
            x.setSeconds(0);
38
            return x;
39
        }
40 37
        String date = getStr(args, 0);
41
        String format = null;
42
        if( args.length==2 ) {
43
            format = getStr(args, 1);
44
        }
45
        SimpleDateFormat df = new SimpleDateFormat();
46
        if( format != null ) {
47
            df.applyPattern(format);
48
        }
38
        String format = getStr(args, 1);
49 39
        try {
40
            if( date_obj instanceof Date ) {
41
                java.sql.Date x = new java.sql.Date(((Date) date_obj).getTime());
42
                return x;
43
            }
44
            Locale locale = Locale.getDefault();
45
            if( args.length==3 ) {
46
              locale = (Locale) ToolsLocator.getDataTypesManager().get(DataTypes.LOCALE).coerce(getStr(args,2));
47
            }
48
            SimpleDateFormat df = new SimpleDateFormat(format, locale);
50 49
            Date x = df.parse(date);
51
            x.setHours(0);
52
            x.setMinutes(0);
53
            x.setSeconds(0);
54
            return x;
55
        } catch (ParseException ex) {
50
            java.sql.Date x2 = new java.sql.Date(x.getTime());
51
            return x2;
52
        } catch (Exception ex) {
56 53
            throw new RuntimeException("Can't parse date value '"+date+"' with format '"+format==null?"":format+"'", ex);
57 54
        }
58 55
        

Also available in: Unified diff