【问题标题】:Bad date format in SQLite databaseSQLite 数据库中的错误日期格式
【发布时间】:2018-04-24 11:59:02
【问题描述】:

我在 Android 中遇到问题。有一些类可以将一些数据保存到数据库中。问题:有时数据库中的数据格式不正确。

例如,当使用“yyyy-MM-dd'T'HH:mm:ssZ”数据格式时,数据库中的数据显示为“2018-03-22T13:43:01+0200”。

但有时格式不同:“2018-03-22T13:43:0001+0200”。出现了两个零。 之后,当尝试从数据库中获取数据时 ParseException 出现在 SimpleCursorParser.java getDate(columnName) mathod

public class DateUtils {

public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
    /**
     * @return DateFormat in database
     */
    public static DateFormat getDataFormat() {
        return new SimpleDateFormat(DATE_FORMAT, Locale.US);
    }
}

public class DatabaseContentValues {
    private ContentValues mValues;
    private final DateFormat mDateFormat;

    public DatabaseContentValues(int initialSize) {
        mDateFormat = DateUtils.getDataFormat();
        mValues = new ContentValues(initialSize);
    }

    public void putNotNull(String key, Date value) {
    if (value != null)
        mValues.put(key, mDateFormat.format(value));
    }

    public ContentValues getDBValues() {
        return mValues;
    }
}

public class SimpleCursorParser {
     private final Cursor mCursor;
     private DateFormat mDateFormat;

     public SimpleCursorParser(Cursor cursor) {
         mCursor = cursor;
         mDateFormat = DateUtils.getDataFormat();
     }


     public Date getDate(String columnName) {
         final int columnIndex = mCursor.getColumnIndex(columnName);
         if (columnIndex != -1) {
             if (!mCursor.isNull(columnIndex)) {
                 try {
                     return mDateFormat.parse(
                         mCursor.getString(columnIndex)
                      );
                 } catch (ParseException e) {
                     e.printStackTrace();
                 }
             }
         }
         return null;
    }
}

public class SomeDbClass {
    private Date created;

    public SomeDbClass(Cursor cursor) {
        SimpleCursorParser parser = new SimpleCursorParser(cursor);
        created = parser.getDate("created");
    }

    public void setCreated(Date created) {
         this.created = created;
    }

    public ContentValues getDbValues() {
        DatabaseContentValues values = new DatabaseContentValues();
        values.putNotNull(“created”, created);
        return values.getDBValues();
    }

}

public class SomeActivity {
    SomeDbClass dbInfo = new SomeDbClass();
    dbInfo.setCreated(new Date());
    Uri newUri = getContentResolver().insert(someUri, dbInfo.getDbValues());
    Cursor cursor = getContentResolver().query(newUri, null, null, null, null);
    cursor.moveToFirst();
    SomeDbClass infoInDb = new SomeDbClass(cursor);
    infoInDb.getDate(); // <—— when there is bad date format in DB, date value is null here. 
    cursor.close();
}

【问题讨论】:

标签: android sqlite android-sqlite android-contentprovider simpledateformat


【解决方案1】:

在表格日期字段中,在表格创建时间采用字符串或文本数据类型。 然后在将日期存储为特定格式之后。 如果你想同时添加日期和时间,那么像这样改变格式

public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";

【讨论】:

  • 是,但不明白将数据存储到数据库中的格式。
  • 这是格式:yyyy-MM-dd'T'HH:mm:ssZ,但正如您在图像i.stack.imgur.com/axdJX.png 中看到的那样,格式在某种程度上有所不同。它很少发生。但需要修复。
  • 我测试了这种格式,它给出了数据库中定义的值,用于存储数据。
  • 您定义了将日期存储在数据库中的格式,我给出了该格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多