Revision: 4723 http://sourceforge.net/p/jump-pilot/code/4723 Author: elnico Date: 2015-12-29 16:13:05 +0000 (Tue, 29 Dec 2015) Log Message: ----------- Better date handling for ValueConverterFactory: try to read the date as String from FlexibleDateParser Added new ISO 8601-compliant format for FlexibleDateParser SQLite DATE and DATETIME column types now supported and converted to Java Date in OJ
Modified Paths: -------------- core/trunk/src/com/vividsolutions/jump/datastore/jdbc/ValueConverterFactory.java core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteValueConverterFactory.java core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_dmy.txt core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_mdy.txt Modified: core/trunk/src/com/vividsolutions/jump/datastore/jdbc/ValueConverterFactory.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/datastore/jdbc/ValueConverterFactory.java 2015-12-29 14:08:54 UTC (rev 4722) +++ core/trunk/src/com/vividsolutions/jump/datastore/jdbc/ValueConverterFactory.java 2015-12-29 16:13:05 UTC (rev 4723) @@ -1,6 +1,7 @@ package com.vividsolutions.jump.datastore.jdbc; import com.vividsolutions.jump.feature.AttributeType; +import com.vividsolutions.jump.util.FlexibleDateParser; import java.sql.ResultSet; import java.sql.ResultSetMetaData; @@ -119,7 +120,22 @@ public AttributeType getType() { return AttributeType.DATE; } public Object getValue(ResultSet rs, int columnIndex) throws SQLException { //return rs.getDate(columnIndex); - return rs.getTimestamp(columnIndex); + Object ret = null; + try { + ret = rs.getTimestamp(columnIndex); + } catch (Exception e) { + // try to read date from string, as some SpatialDatabases like SQLite + // can store DATE type in string + FlexibleDateParser parser = new FlexibleDateParser(); + try { + ret = parser.parse(rs.getString(columnIndex), false); + } catch (Exception ee) { + System.err.println("cannot parse date value: \"" + rs.getString(columnIndex) + + "\" Defaulting to null.\n" + ee.getMessage()); + } + } + + return ret; } } Modified: core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteValueConverterFactory.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteValueConverterFactory.java 2015-12-29 14:08:54 UTC (rev 4722) +++ core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteValueConverterFactory.java 2015-12-29 16:13:05 UTC (rev 4723) @@ -46,11 +46,6 @@ GeometricColumnType gcType = metadata.getGeoColTypesdMap().get(tableName + "." + columnName); if (gcType == null) { - // not a geo column, handle date/datetime columns by forcing text mode - // todo: use Joda to parse date string ? - if ("DATETIME".equalsIgnoreCase(dbTypeName) || "DATE".equalsIgnoreCase(dbTypeName)) { - return ValueConverterFactory.STRING_MAPPER; - } ValueConverter stdConverter = ValueConverterFactory.getConverter(rsm, columnIndex); if (stdConverter != null) { return stdConverter; Modified: core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_dmy.txt =================================================================== --- core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_dmy.txt 2015-12-29 14:08:54 UTC (rev 4722) +++ core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_dmy.txt 2015-12-29 16:13:05 UTC (rev 4723) @@ -34,6 +34,10 @@ yyyy-MM-dd'T'HH:mm:ss # most informative format conforming the ISO 8601 yyyy-MM-dd'T'HH:mm:ss.SSSZ +# Nicolas Ribot: ISO 8601 compliant ? (used by sqlite for instance) +# Nicolas Ribot: ISO8601 allows the usage of "Z" to indicate UTC instead of "+00:00". +#(used by sqlite for instance) +yyyy-MM-dd'T'HH:mm:ss'Z' yyyyMMddHHmmss MMMM d, yyyy yyyy.MM.dd hh:mm:ss Modified: core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_mdy.txt =================================================================== --- core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_mdy.txt 2015-12-29 14:08:54 UTC (rev 4722) +++ core/trunk/src/com/vividsolutions/jump/util/FlexibleDateParser_mdy.txt 2015-12-29 16:13:05 UTC (rev 4723) @@ -72,6 +72,9 @@ yyyy.MM.dd HH:mm:ss yyyy-Md HH:mm:ss yyyy-MM-dd-G-hh-mm-ss-z +# Nicolas Ribot: ISO8601 allows the usage of "Z" to indicate UTC instead of "+00:00". +#(used by sqlite for instance) +yyyy-MM-dd'T'HH:mm:ss'Z' yyyy-MM-dd'T'HH:mm:ss yyyy-MM-dd hh:mm:ss yyyy-MM-dd HH:mm:sszzzzzzzzz ------------------------------------------------------------------------------ _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel