From efb9a43b73e2a69d860f2d1ee2afa5bf0671aa16 Mon Sep 17 00:00:00 2001 From: Will Moffat Date: Wed, 7 Apr 2010 19:12:08 +0000 Subject: [PATCH] Added: toDate() now supports formats. My dataset has the same dates written in two styles: Nov-09 and 11/09 You can now parse this using: value.toDate2('MM/yy','MMM-yy').toString('yyyy-MM') git-svn-id: http://google-refine.googlecode.com/svn/trunk@414 7d457c2a-affb-35e4-300a-418c747d4874 --- .../gridworks/expr/functions/ToDate.java | 66 ++++++++++++++----- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/metaweb/gridworks/expr/functions/ToDate.java b/src/main/java/com/metaweb/gridworks/expr/functions/ToDate.java index 2afc70685..7e616a0bc 100644 --- a/src/main/java/com/metaweb/gridworks/expr/functions/ToDate.java +++ b/src/main/java/com/metaweb/gridworks/expr/functions/ToDate.java @@ -5,6 +5,10 @@ import java.util.Properties; import org.json.JSONException; import org.json.JSONWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.GregorianCalendar; + import com.metaweb.gridworks.expr.util.CalendarParser; import com.metaweb.gridworks.expr.util.CalendarParserException; import com.metaweb.gridworks.gel.Function; @@ -12,33 +16,61 @@ import com.metaweb.gridworks.gel.Function; public class ToDate implements Function { public Object call(Properties bindings, Object[] args) { - if (args.length == 1 || args.length == 2) { - Object o1 = args[0]; - if (o1 != null && o1 instanceof String) { - boolean month_first = true; - if (args.length == 2) { - Object o2 = args[1]; - if (o2 != null && o2 instanceof Boolean) { - month_first = ((Boolean) o2).booleanValue(); - } + if (args.length == 0) { + // missing value, can this happen? + } + if (!(args[0] instanceof String)) { + // ignore cell values that aren't strings + return null; + } + String o1 = (String) args[0]; + + // "o, boolean month_first (optional)" + if (args.length == 1 || (args.length == 2 && args[1] instanceof Boolean)) { + boolean month_first = true; + if (args.length == 2) { + month_first = (Boolean) args[1]; + } + try { + return CalendarParser.parse( o1, (month_first) ? CalendarParser.MM_DD_YY : CalendarParser.DD_MM_YY); + } catch (CalendarParserException e) { + // do something about + } + } + + // "o, format1, format2 (optional), ..." + if (args.length>=2) { + for (int i=1;i