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
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