From 89a52aa7bd8dc7c415b9ca06113fc6ffe6ee5fcb Mon Sep 17 00:00:00 2001 From: oliexdev Date: Sun, 27 Oct 2019 10:55:20 +0100 Subject: [PATCH] set CSV date format to ISO 8601:2004 and implement backward compatible for the old date format dd.MM.yyyy, see issue #506 --- .../core/datatypes/ScaleMeasurement.java | 4 ++-- .../openscale/core/utils/CsvHelper.java | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleMeasurement.java b/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleMeasurement.java index 467d353d..4ac71df2 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleMeasurement.java +++ b/android_app/app/src/main/java/com/health/openscale/core/datatypes/ScaleMeasurement.java @@ -16,6 +16,7 @@ package com.health.openscale.core.datatypes; +import com.health.openscale.core.utils.CsvHelper; import com.j256.simplecsv.common.CsvColumn; import java.lang.reflect.Field; @@ -45,8 +46,7 @@ public class ScaleMeasurement implements Cloneable { private int userId; @ColumnInfo(name = "enabled") private boolean enabled; - @CsvColumn(format = "dd.MM.yyyy HH:mm", mustNotBeBlank = true) - @ColumnInfo(name = "datetime") + @CsvColumn(converterClass = CsvHelper.DateTimeConverter.class, format ="yyyy-MM-dd HH:mm", mustNotBeBlank = true) @ColumnInfo(name = "datetime") private Date dateTime; @CsvColumn(mustNotBeBlank = true) @ColumnInfo(name = "weight") diff --git a/android_app/app/src/main/java/com/health/openscale/core/utils/CsvHelper.java b/android_app/app/src/main/java/com/health/openscale/core/utils/CsvHelper.java index 981aa94b..2e17d45a 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/utils/CsvHelper.java +++ b/android_app/app/src/main/java/com/health/openscale/core/utils/CsvHelper.java @@ -17,13 +17,18 @@ package com.health.openscale.core.utils; import com.health.openscale.core.datatypes.ScaleMeasurement; +import com.j256.simplecsv.converter.DateConverter; +import com.j256.simplecsv.processor.ColumnInfo; import com.j256.simplecsv.processor.ColumnNameMatcher; import com.j256.simplecsv.processor.CsvProcessor; +import com.j256.simplecsv.processor.ParseError; import java.io.BufferedReader; import java.io.IOException; import java.io.Writer; import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; public class CsvHelper { @@ -108,4 +113,22 @@ public class CsvHelper { return csvProcessor.readRows(reader, null); } + + // backward compatible for openScale version >= 2.1.2 to support old date format dd.MM.yyyy, see issue #506 + public static class DateTimeConverter extends DateConverter { + private static final SimpleDateFormat srcDateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm"); + private static final SimpleDateFormat dstDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + @Override + public Date stringToJava(String line, int lineNumber, int linePos, ColumnInfo columnInfo, String value, ParseError parseError) throws ParseException{ + try { + Date srcDate = srcDateFormat.parse(value); + value = dstDateFormat.format(srcDate); + } catch (ParseException ex) { + // ignore + } + + return super.stringToJava(line, lineNumber, linePos, columnInfo, value, parseError); + } + } }