Questo è il codice che ho trovato nella Palestra Database:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Helper helper=new Helper(this); Date d=new Date(); helper.save(d); Long numero=helper.query(5).getLong(1); Log.v("NUMERO",""+numero); DateFormat df=new SimpleDateFormat("hh:mm:ss"); Log.v("DATA",df.format(new Date(numero)).toString()); } class Helper extends SQLiteOpenHelper{ public Helper(Context context) { super(context, "Database.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table TABELLA(_id integer primary key, data integer)"); } public void save(Date d){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("data", d.getTime()); db.insert("TABELLA", null, values); } public Cursor query(int numero){ SQLiteDatabase db=this.getReadableDatabase(); Cursor crs=db.rawQuery("select * from TABELLA where _id="+numero, null); crs.moveToFirst(); return crs; } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } } }Ecco, non ricordo praticamente niente.
Il campo in cui memorizzare la data è un Integer, e ricordo che in SQL un campo di tipo Integer può memorizzare anche un numero Long.
Perché memorizzare un numero long?
Fosse perché si mette il tempo in millisecondi dal 1 gennaio 1970?
Credo proprio di sì.
Analizziamo il codice...
Ho scritto agevolmente il codice per la creazione di un Database:
class Helper extends SQLiteOpenHelper{ public Helper(Context context) { super(context, "database.db", null, 1); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table TABELLA(_id integer primary key, date integer)"); } public void save(int data){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("date", data); db.insert("TABELLA", null, values); } public Cursor query(){ SQLiteDatabase db=this.getWritableDatabase(); Cursor crs=db.rawQuery("select * from tabella",null); crs.moveToFirst(); Cursor c=crs; crs.close(); return c; } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }ma riguardando il codice precedente ho visto che il codice per la conversione a numero Long è presente all'interno dello stesso metodo save del database.
Risolto:
public void save(Date data){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("date", data.getTime()); db.insert("TABELLA", null, values); }Vado a salvare e a verificare:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Helper helper=new Helper(this); Date d=new Date(); helper.save(d);Sì, sono scritti dei numeri, che sarebbero i millisecondi dalla data chiamata Epoch.
Come si ricompongono in una data?
Si usa DateFormat.
Proviamo.
Definiamo un oggetto DateFormat.
DateFormat df=new SimpleDateFormat("dd:MM:yyyy"); Log.v("DATA", ""+df.format(new Date(numero)));E vediamo:
07-16 20:50:26.622: V/DATA(15687): 16:07:2016Perfetto!
Nessun commento:
Posta un commento