Najwydajniejszym formatem będzie timestamp czyli liczba sekund lub milisekund od 1 stycznia 1970 roku.
Jest on przechowywany w zmiennej typu long, więc operacje typu sortowanie są bardzo szybkie - w końcu to tylko liczba.
Jeśli chodzi o wady to po pierwsze - nie human redable, np. gdy piszę tą odpowiedź jest 1547025352. Nic nam to ludziom nie mówi. To ma znaczenie podczas debugowania. Po drugie - możesz mieć problem z strefami czasowymi, gdyż timestamp nie zawiera żadnych informacji o nich.
Aby pobrać aktualny timestamp (w Android używa się wersji z milisekundami) piszesz:
long now = System.currentTimeInMillis();
jak chcesz dwa dni wcześniej:
long twoDaysAgo = System.currentTimeInMillis() - (24 * 60 * 60 * 1000) * 2
Jednak gdy chcesz wyświetlić musisz użyć parsera:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
String date = sdf.format(new Date(now))
// date jest teraz "2019-01-09 10:22:47"
Jak chcesz zmienić string w timestamp to odwrotnie:
long timestamp = sdf.parse("2019-01-13 23:54:12").getTime();
Warto spojrzeć do dokumentacji SimpleDateFormat, aby wiedzieć co te literki oznaczają
Ten format w stringu jest o tyle dobry, że też może służyć sortowaniu, jednak już mniej wydajnym. Aby móc sortować datami w stringu pamiętaj, że muszą mieć najpierw rok, potem miesiąc itd. nie odwrotnie tak jak zazwyczaj ludzie w Polsce piszą.
Fajną klasą jest też Calendar, bo ma kilka świetnych metod do ,,chodzenia po datach"
Calendar c = Calendar.getInstance(); //domyślnie jest teraz
c.set(year, month, day);
c.set(Calendar.HOUR_OF_DAY, 20);
int dayOfYear = c.get(Calendar.DAY_OF_YEAR);
c.add(Calendar.DAY_OF_YEAR, 15); //przesuwamy datę o 15 dni do przodu
long timestamp = c.getTimeInMillis();
Czego użyć w bazie danych Sqllite? String albo timestamp, osobiście wolę timestamp, bo mniej miejsca zajmuje i jest szybszy.