Dans mon dernier billet sur l’optimisation d’application Android, je cherchais comment concilier la bonne pratique qui consiste à utiliser des CharArrayBuffer avec des Date.

Tout d’abord, il faut rappeler qu’il est plus sûr (en terme de maintenance) de stocker une date sous forme numérique. Pour cela, la base de données SQLite fournie avec Android permet seulement de stocker des INTEGER. Les dates doivent donc être enregistrée comme un timestamp en seconde (et non pas en milliseconde comme il est courant de le voir en Java).

Jusqu’à présent, je récupérai les dates en secondes, puis je les formatais avec un SimpleDateFormat. Or, cette méthode ne permet pas d’utiliser simplement les CharArrayBuffer pour optimiser le défilement des listes. Heureusement pour nous, SQLite propose une fonction intéressante : datetime(). Il faut donc sélectionner la projection suivante :

datetime(ma_colonne,'unixepoch','localtime')

De plus, si vous utilisez les projection maps, vous n’aurez rien à changer dans le code de votre application (mise à part le type retourné par le Cursor).

Vous n’aurez plus à vous soucier des dates dans vos applications Android maintenant ! 😉