Каков лучший способ сохранять даты в SQLite?

Со дни я работаю в приложении в Android, в котором я должен хранить данные в SQLite, основные данные для контроля пользователя.

Я искал информацию по этому поводу на лучшем способе сохранять дату в SQLite и лучше, что я нашел, он состоял в том, чтобы сохранять это как числовая стоимость Long, но мне хотелось бы знать мнение о Вас, основанный на Вашем опыте.

Таким образом я храню данные, включенный дата

public String getInsertLoginOffline(Login loginParams) {
    long idResult = -1
    UseDatabaseHelper useDataBaseHelper = new UseDatabaseHelper(context, "MyDataBase", null, 1);
    SQLiteDatabase db = useDataBaseHelper.getWritableDatabase();
    ContentValues dbInsert = new ContentValues();
    StringBuilder fecha = new StringBuilder();
    String outSave = null;

    try {
        dbInsert.put("user", loginParams.getUser());
        dbInsert.put("password", loginParams.getPass()); //--hash

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Calendar gregorianCalendar = new GregorianCalendar();
        fecha.append(String.valueOf(gregorianCalendar.get(Calendar.YEAR)))
                    .append("-")
                    .append(gregorianCalendar.get(Calendar.MONTH)+1)
                    .append("-")
                    .append(gregorianCalendar.get(Calendar.DAY_OF_MONTH));

        Date vpstatusdate = formatter.parse(fecha.toString());

        dbInsert.put("datereg", vpstatusdate.getTime());
        dbInsert.put("status", 1);
        idResult = db.insertOrThrow("LOGIN", null, dbInsert);
        if (idResult > -1) {
           outSave = "OK";
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (db != null) {
            db.close();
        }
        if (useDataBaseHelper != null) {
            useDataBaseHelper.close();
        }
    }
    return outSave;
}

И способ читать ее был бы таким сжатым способом:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
long fecReg = login.getFecReg();    
Date outFecReg = new Date(fecReg);
txtFechaReg.setText("Fecha Registro: " + sdf.format(outFecReg));

Какая-то другая более работоспособная форма существует?

18
задан 12.02.2017, 17:56
1 ответ

Тип данных Дата (Датировать) и час (Тайм)

У SQLite нет класса, размещенного для хранения данных о типе даты / или час. В Вашем месте, интегрированных функциях даты и часа SQLite они способны хранить даты и часы как стоимость текста (TEXT), реально (РЕАЛЬНО) или целое число (INTEGER):

  • Такой TEXT как цепи ISO8601 ("AAAA-MM-DD HH: MM: SS.sss").
  • РЕАЛЬНЫЙ как дневные числа juliano, число дней с полудня в Гринвиче от 24 ноября 4714 до н.э. согласно грегорианскому календарю proléptico.
  • INTEGER как Тьемпо Уникс, - число секунд с 1970-01-01 00:00:00 UTC. Приложения могут выбирать, чтобы хранить даты и часы в любом из этих форматов и свободно конвертировать между форматами используя функции, присоединенные в дате и часе.

Он сохраняет и извлекается как тип TEXT, REAL или INTEGER но представив ее в Interfaz de Usuario используется класс SimpleDateFormat чтобы давать ему формат, соответствовавший твоей необходимости ("dd / мм / yyyy"), в этом случае, вот то, что обычно осуществляется.

В действительности дата может сохранять в любом из 3 типов, но он прокомментировал бы эти рассуждения:

  • Если она сохраняется как INTEGER, он мог бы занимать меньше место в зависимости от величины стоимости, но ты нуждаешься в том, чтобы распределить ему формат, чтобы представлять ее в Интерфейсе Пользователя.
  • Если она сохраняется как TEXT, с форматом, который ты желаешь, займи больше место, но возможно у тебя не было бы необходимости конвертировать ее, чтобы представлять ее в интерфейсе пользователя.
  • Ты можешь использовать РЕАЛЬНО или INTEGER завися, если описанные ранги ранее - внутри твоей необходимости.

Говоря как разработчик Android, с моей точки зрения лучшее состоит в том, чтобы сохранять ее как тип INTEGER, и на основании formateador возможно представлять различных форм в UI.

String CREATE_TABLE = "CREATE TABLE ARTICULOS( " +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                "titulo TEXT, "+
                "fecha INTEGER, "+
                "author TEXT )";
14
ответ дан 01.12.2019, 08:16
  • 1
    Спасибо @Elenasys, хороший explicaci и # 243; n. – Brando T. 10.12.2015, 16:19
  • 2
    привет @Elenasys я имею ошибку по отношению к parsear дата он посылает мне эту ошибку – Hugo Rodriguez 15.07.2016, 20:17
  • 3
    java.text. ParseException: Unparseable восходил: " Сат Феб 27 0:00:00 EST 2016" (at офсет 0) – Hugo Rodriguez 15.07.2016, 20:17
  • 4
    Уго формат, который ты пробуешь ввести, не принят. Мне кажется, что официальный формат используя восходил, украдите это ийии-ММ-дд:ММ:СС – Jorgesys♦ 15.07.2016, 20:42

Теги

Похожие вопросы