Не рекомендуется хранить даты в виде строк в силу ряда причин . Например: если вы хотите выполнить запрос для сортировки ваших данных по датам, вы можете просто указать «ORDER BY date», если вы сохранили их правильно, но сохранение строк не позволит этого. Более подробное объяснение можно найти здесь: Почему вы не должны хранить даты как строки в базе данных
Итак, гораздо лучший способ сохранить даты будет:
Если вы используете ROOM
Для классов сущностей укажите дату как тип java.util.Date. Как показано ниже:
@Entity(tableName = NoteConstants.TABLE_NAME)
public class Note {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = NoteConstants.ATTR_ID)
private int id;
@ColumnInfo(name = NoteConstants.ATTR_DESCRIPTION)
private String description;
@ColumnInfo(name = NoteConstants.ATTR_DATE)
private Date date;
public Note(String description) {
this.description = description;
this.date = new Date();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescription() {
return description;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
Теперь нам нужно определить typeConverter для типа даты Java, который будет использовать ROOM:
import androidx.room.TypeConverter;
import java.util.Date;
public class DateConverter {
@TypeConverter
public static long toTimeStamp(Date date){
return date == null? null : date.getTime();
}
@TypeConverter
public static Date toDate(Long timeStamp){
return timeStamp == null ? null : new Date(timeStamp);
}
}
, наконец, нам нужно указать преобразователи типов в ROOM @Класс базы данных с использованием @TypeConverters:
@Database(entities = {Note.class}, version = 1)
@TypeConverters(DateConverter.class)
public abstract class NoteDatabase extends RoomDatabase {
private static String DB_NAME = "note_database";
private static NoteDatabase instance;
public abstract NoteDAO getNoteDao();
public static synchronized NoteDatabase getInstance(Context context) {
if (instance == null) {
instance = Room.databaseBuilder(context.getApplicationContext(),
NoteDatabase.class, DB_NAME)
.fallbackToDestructiveMigration()
.build();
}
return instance;
}
}
Если вы не используете ROOM и не используете необработанный SQLite openHelper:
Просто сохраните длинную метку времени в базе данных и используйтеметоды преобразования типов, которые мы создали выше, вручную, чтобы получить Date из длинной метки времени и наоборот.