JavascriptProva

giovedì 19 gennaio 2017

Salvataggio di date come Long in un database e rilevarne valori minimo e massimo.

Se io devo impostare una data, cosa mi conviene, usare Date o Calendar?
E come si fa?

Prima modalità:
        Date data1=new Date("5/09/1961");
        Date data2=new Date("13/06/1962");
        System.out.println(data1);
Ottengo:
01-19 00:48:04.397 28832-28832/? I/System.out: Tue May 09 00:00:00 GMT+00:00 1961
In questo modo (deprecato) bisogna ordinare mese e giorno secondo la notazione anglosassone, però.

Un'altra modalità sarebbe convertire la stringa in Date:
        Date data1=new Date();
        String strDat="5/9/1961";
        SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
        try {
            data1=sdf.parse(strDat);
            System.out.println(data1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
01-19 00:58:48.387 31082-31082/? I/System.out: Tue Sep 05 00:00:00 GMT+00:00 1961
Queste modalità creano un tipo Date (ovviamente contenente una data) a partire da una data specifica, espressa come stringa.


Per riportare il tipo Date a stringa, si usa sempre SimpleDateFormat con l'istruzione format.

Ora metto diverse date in ordine sparso nel database e poi le ordino con ORDER BY.
Queste sono le date ordinate, ottenute creando tipi Date con la stringa della data come parametro nel costruttore, i quali vengono memorizzati mediante la funzione Date.getTime().
Vengono ripresi dal database creando un Date avente nel costruttore il Long.
        Date data1=new Date("09/05/1961");
        Date data2=new Date("01/10/2003");
        Date data3=new Date("06/13/1962");

        helper.save(data1.getTime());
        helper.save(data2.getTime());
        helper.save(data3.getTime());
,,,

            public void onClick(View v) {
                Cursor crs=helper.query();
                do {
                    System.out.println(new Date(crs.getLong(crs.getColumnIndex("millidat"))));
                }while(crs.moveToNext());
            }
Ora invece di Date uso Calendar:
        Calendar data1=Calendar.getInstance();
        data1.set(Calendar.YEAR,1961);
        data1.set(Calendar.MONTH,8);
        data1.set(Calendar.DAY_OF_MONTH,5);
        
Questo porta via molto tempo e codice: c'è un modo più facile di creare un Calendar impostando una data?
Sì, c'è:
        Calendar cal1=Calendar.getInstance();
        Calendar cal2=Calendar.getInstance();
        Calendar cal3=Calendar.getInstance();
        cal1.set(1961,8,5);
        cal2.set(2003,0,10);
        cal3.set(1962,5,13);

        helper.save(cal1.getTimeInMillis());
        helper.save(cal2.getTimeInMillis());
        helper.save(cal3.getTimeInMillis());

Salvati i dati nel database, ho trovato come estrapolarne il minimo e il massimo:
    public Cursor query(){
        SQLiteDatabase db=this.getWritableDatabase();
        Cursor c=db.rawQuery("select min(millidat) as millidat from tabella",null);
        c.moveToFirst();
        return c;
    }
    public Cursor query(){
        SQLiteDatabase db=this.getWritableDatabase();
        Cursor c=db.rawQuery("select max(millidat) as millidat from tabella",null);
        c.moveToFirst();
        return c;
    }

Nessun commento:

Posta un commento