Ormlite сохраняет формат даты с арабскими цифрами в базе данных - PullRequest
0 голосов
/ 07 ноября 2018

У меня проблема с сохранением даты с помощью Ormlite, когда в приложении по умолчанию используется арабский язык "ar", а на устройстве - арабский. Дата сохраняется в SQLite с арабскими цифрами, но мне нужен Ormlite для сохранения данных с английскими языковыми настройками.
Я попытался использовать этот persisterClass, но он не решил мою проблему:

    public class DateStringSQLiteType extends DateStringType {

    private static SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);


    protected static final DateStringFormatConfig dateFormatConfig = new DateStringFormatConfig(
            sdfDateTime.toPattern());

    private static final DateStringSQLiteType singleTon = new DateStringSQLiteType();

    public static DateStringSQLiteType getSingleton() {
        return singleTon;
    }

    private DateStringSQLiteType() {
        super(SqlType.STRING, new Class<?>[0]);
    }

    /**
     * Convert a default string object and return the appropriate argument to a
     * SQL insert or update statement.
     */
    @Override
    public Object parseDefaultString(FieldType fieldType, String defaultStr)
            throws SQLException {
        DateStringFormatConfig formatConfig = convertDateStringConfig(
                fieldType, dateFormatConfig);
        try {
            // we parse to make sure it works and then format it again
            return normalizeDateString(formatConfig, defaultStr);
        } catch (ParseException e) {
            throw SqlExceptionUtil.create("Problems with field " + fieldType
                    + " parsing default date-string '" + defaultStr
                    + "' using '" + formatConfig + "'", e);
        }
    }

    /**
     * Return the SQL argument object extracted from the results associated with
     * column in position columnPos. For example, if the type is a date-long
     * then this will return a long value or null.
     *
     * @param fieldType Associated FieldType which may be null.
     * @throws SQLException If there is a problem accessing the results data.
     */
    @Override
    public Object resultToSqlArg(FieldType fieldType, DatabaseResults results,
                                 int columnPos) throws SQLException {
        return results.getString(columnPos);
    }

    /**
     * Return the object converted from the SQL arg to java. This takes the
     * database representation and converts it into a Java object. For example,
     * if the type is a date-long then this will take a long which is stored in
     * the database and return a Date.
     *
     * @param fieldType Associated FieldType which may be null.
     * @param sqlArg    SQL argument converted with
     *                  {@link #resultToSqlArg(FieldType, DatabaseResults, int)} which
     *                  will not be null.
     */
    @Override
    public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos)
            throws SQLException {
        String value = (String) sqlArg;
        DateStringFormatConfig formatConfig = convertDateStringConfig(
                fieldType, dateFormatConfig);
        try {
            return parseDateString(formatConfig, value);
        } catch (ParseException e) {
            throw SqlExceptionUtil.create("Problems with column " + columnPos
                    + " parsing date-string '" + value + "' using '"
                    + formatConfig + "'", e);
        }
    }

    /**
     * Convert a Java object and return the appropriate argument to a SQL insert
     * or update statement.
     */
    @Override
    public Object javaToSqlArg(FieldType fieldType, Object obj) {
        DateFormat dateFormat = convertDateStringConfig(fieldType,
                dateFormatConfig).getDateFormat();
        return dateFormat.format((Date) obj);
    }

    /**
     * @throws SQLException If there are problems creating the config object. Needed for
     *                      subclasses.
     */
    @Override
    public Object makeConfigObject(FieldType fieldType) {
        String format = fieldType.getFormat();
        if (format == null) {
            return dateFormatConfig;
        } else {
            return new DateStringFormatConfig(format);
        }
    }

}

Ormlite save the Date format with Arabic Digits in the database

1 Ответ

0 голосов
/ 07 ноября 2018

Другим способом вы можете преобразовать дату и время в значение временной метки, а затем сохранить в виде строки или двойного ...

...