Autore Topic: Date Format to SQLite  (Letto 1912 volte)

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Date Format to SQLite
« il: 04 Ottobre 2013, 18:04:35 CEST »
0
Ciao a tutti, da pochissimo stò studiando l'SDK Android...

sto creando un app nella quale permetto anche di memorizzare alcuni dati nel db tra cui anche la data (che sqlite supporta in questo formato yyyy-mm-dd)

scegliendo la data da memorizzare tramite "pickDate" (ho trovato il codice in un altro post del forum) e visualizzarla in una textview nel formato supportato dal

paese in cui è installata l'app. Cioè se in Italia nella textview ci dovrà  essere "gg-mm-aaaa", negli usa "aaaa-mm-gg" e così via, poi però al momento dell'invio dei dati al db la data dovrà essere formattata nel formato di sqlite cioè yyyy-mm-dd.

Spero che abbiate capito il mio obiettivo
Grazie

Codice (Java): [Seleziona]
Calendar cal = Calendar.getInstance();
                OnDateSetListener callback = new OnDateSetListener() {
                        boolean done = false;

                        @Override
                        public void onDateSet(DatePicker view, int year, int monthOfYear,
                                        int dayOfMonth) {

                               
                                if (!done) {
                                        CharSequence formattedDate = DateFormat.format(
                                                        "yyyy-MM-dd", new GregorianCalendar(year,
                                                                        monthOfYear, dayOfMonth));
                                        DataScelta.setText(formattedDate);
                                        done = true;
« Ultima modifica: 11 Ottobre 2013, 16:42:36 CEST da Nicola_D, Reason: Sistemato il titolo del post »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Date Fromat to SQLite
« Risposta #1 il: 04 Ottobre 2013, 18:19:20 CEST »
0
Non ho ben capito la domanda.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Date Fromat to SQLite
« Risposta #2 il: 04 Ottobre 2013, 18:24:57 CEST »
0
Dunque, se sei in Italia quando scegli la data nella textview devi vedere il formato gg-mm-aaaa, se sei negli usa yyyy-mm-dd ecc...

Poi però al momento dell'invio dei dati al db tramite codice ci sarà bisogno di convertire il formato in quello supportato da sqlite yyyy-mm-dd

Vorrei conoscere il codice che mi permette di fare questa conversione  :-X

Offline matttt

Re:Date Fromat to SQLite
« Risposta #3 il: 04 Ottobre 2013, 18:25:41 CEST »
0
Io di solito quando devo memorizzare date / orari preferisco un bel timestamp, così con un semplice Long fai tutto.
Ti serve il relativo Date? C'è il costruttore da timestamp.
Devi fare differenze / calcoli temporali? Basta fare operazioni aritmetiche basate sui secondi o millesimi.
E quando hai necessità di stamparla usi SimpleDateFormat.
Le mie apps su Google Play Store:

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Date Fromat to SQLite
« Risposta #4 il: 04 Ottobre 2013, 18:34:05 CEST »
0
nell'Helper il campo che utilizzo per la data è di tipo TEXT

Ho visto Simple dateformat per stampare ma come faccio a convertire la data al momento dell'invio al db??

Cioè se quella scelta la vedo così gg-mm-aaaa quando la invio al db devo convertirla in yyyy-mm-dd

Offline matttt

Re:Date Fromat to SQLite
« Risposta #5 il: 04 Ottobre 2013, 18:46:47 CEST »
0
In questo post stavo spiegando la stessa operazione:
Query SQLite...date - Android Developers Italia
Le mie apps su Google Play Store:

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Date Fromat to SQLite
« Risposta #6 il: 04 Ottobre 2013, 23:26:46 CEST »
0
Così però la data non viene formattata nel formato in Inglese, Italiano ecc.....

Offline matttt

Re:Date Fromat to SQLite
« Risposta #7 il: 06 Ottobre 2013, 10:05:19 CEST »
0
Puoi usare il costruttore di SimpleDateFormat con cui impostare il Locale:
SimpleDateFormat | Android Developers

E ricavare un oggetto Date che poi usi come vuoi.
Se vuoi ricavarti il Locale impostato di default:
Codice (Java): [Seleziona]
Locale current = getResources().getConfiguration().locale;
Oppure usare direttamente un DatePicker:
Pickers | Android Developers

E ottenere i singoli campi (giorno mese anno).
Le mie apps su Google Play Store:

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Date Fromat to SQLite
« Risposta #8 il: 06 Ottobre 2013, 16:33:54 CEST »
0
Ho questo DatePicker Dialog dal quale ottengo la data nel formato della lingua impostata sul dispositivo...
Ora prima di inserirli nel db sqlite devo convertirli nel formato di sqlite "yyyy-mm-gg"

Non riesco ad impostare SimpleDateFormat nel contentValues:

Datepicker:
Codice (Java): [Seleziona]
public void chooseDate(View v) {
    new DatePickerDialog(Mov.this, d,
                          dateAndTime.get(Calendar.YEAR),
                          dateAndTime.get(Calendar.MONTH),
                          dateAndTime.get(Calendar.DAY_OF_MONTH))
      .show();
  }
 
 
 
  private void updateLabel() {
          mDataScelta.setText(fmtDateAndTime
                              .format(dateAndTime.getTime()));
  }
 
  DatePickerDialog.OnDateSetListener d=new DatePickerDialog.OnDateSetListener() {
    public void onDateSet(DatePicker view, int year, int monthOfYear,
                          int dayOfMonth) {
      dateAndTime.set(Calendar.YEAR, year);
      dateAndTime.set(Calendar.MONTH, monthOfYear);
      dateAndTime.set(Calendar.DAY_OF_MONTH, dayOfMonth);
      updateLabel();
    }
  };

campo data del content value, il campo data della mia tabella è "TEXT"
Codice (Java): [Seleziona]
cv.put(MiaTable.DATA, mDataScelta.getText().toString());
« Ultima modifica: 08 Ottobre 2013, 17:10:32 CEST da Geng »

Offline matttt

Re:Date Fromat to SQLite
« Risposta #9 il: 08 Ottobre 2013, 20:35:18 CEST »
0
Risolto Geng?
Ti dovrebbe bastare...
Codice (Java): [Seleziona]
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
String date_query = sdf2.format( dateAndTime );
Le mie apps su Google Play Store:

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Date Fromat to SQLite
« Risposta #10 il: 08 Ottobre 2013, 22:02:44 CEST »
0
se faccio così:
Codice (Java): [Seleziona]
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
                String strDate= sdf.format( dateAndTime );
               
               
               
        cv.put(MiaTable.DATA, strDate);


 ottengo errore:
Codice (Java): [Seleziona]
10-09 15:54:09.127: E/AndroidRuntime(27757): Caused by: java.lang.IllegalArgumentException
10-09 15:54:09.127: E/AndroidRuntime(27757):    at java.text.DateFormat.format(DateFormat.java:361)
10-09 15:54:09.127: E/AndroidRuntime(27757):    at java.text.Format.format(Format.java:93)
« Ultima modifica: 09 Ottobre 2013, 15:56:11 CEST da Geng »

Offline matttt

Re:Date Fromat to SQLite
« Risposta #11 il: 10 Ottobre 2013, 20:28:24 CEST »
0
Ma... IllegalArgumentException è lanciato dalla riga cv.put() ?!
Prova un po' di debugging: Lod.d( "test", strDate );
E guarda la stringa che produci, se è apposto prova a fare un insert manuale: strDate = "...";
Le mie apps su Google Play Store:

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Date Fromat to SQLite
« Risposta #12 il: 10 Ottobre 2013, 23:02:28 CEST »
0
Credo che il Log.d( "test", strDate ); non venga neanche letto, ho fatto così...
Codice (Java): [Seleziona]
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
            String strDate= sdf.format( dateAndTime );
         
            cv.put(MiaTable.DATA, strDate);
            Log.d( "test", strDate );

metto tutto il logCat
Codice (Java): [Seleziona]
10-10 22:59:04.156: E/AndroidRuntime(24767): java.lang.IllegalStateException: Could not execute method of the activity
10-10 22:59:04.156: E/AndroidRuntime(24767):    at android.view.View$1.onClick(View.java:3735)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at android.view.View.performClick(View.java:4354)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at android.view.View$PerformClick.run(View.java:17962)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at android.os.Handler.handleCallback(Handler.java:725)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at android.os.Looper.loop(Looper.java:137)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at android.app.ActivityThread.main(ActivityThread.java:5328)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at java.lang.reflect.Method.invokeNative(Native Method)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at java.lang.reflect.Method.invoke(Method.java:511)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at dalvik.system.NativeStart.main(Native Method)
10-10 22:59:04.156: E/AndroidRuntime(24767): Caused by: java.lang.reflect.InvocationTargetException
10-10 22:59:04.156: E/AndroidRuntime(24767):    at java.lang.reflect.Method.invokeNative(Native Method)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at java.lang.reflect.Method.invoke(Method.java:511)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at android.view.View$1.onClick(View.java:3730)
10-10 22:59:04.156: E/AndroidRuntime(24767):    ... 11 more
10-10 22:59:04.156: E/AndroidRuntime(24767): Caused by: java.lang.IllegalArgumentException
10-10 22:59:04.156: E/AndroidRuntime(24767):    at java.text.DateFormat.format(DateFormat.java:361)
10-10 22:59:04.156: E/AndroidRuntime(24767):    at java.text.Format.format(Format.java:93)

Offline matttt

Re:Date Fromat to SQLite
« Risposta #13 il: 11 Ottobre 2013, 08:27:57 CEST »
0
Ok ma se fai così è naturale che non arrivi al log, l'eccezione probabilmente viene lanciata prima.
Fai così:
Codice (Java): [Seleziona]
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
Log.d( "test1", dateAndTime.toString() );
String strDate = sdf.format( dateAndTime );
Log.d( "test2", strDate );
Le mie apps su Google Play Store:

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Date Fromat to SQLite
« Risposta #14 il: 11 Ottobre 2013, 16:37:28 CEST »
0
Dunque, ricevo lo stesso errore e i Log.d non vengono letti quindi l'errore è prima.

Riepilogo quello che faccio:
Tramite il DatePicker scelgo la data e la visualizzo nella textview con il  codice:
Codice (Java): [Seleziona]
 private void updateLabel() {
          mDataScelta.setText(fmtDateAndTime
                              .format(dateAndTime.getTime()));
  }
poi nel ContentValues cerco di impostare il formato adatto a sqlite con:
Codice (Java): [Seleziona]
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
                       
                        Log.d( "test1", dateAndTime.toString() );
                        String strDate = sdf.format( dateAndTime );
                        Log.d( "test2", strDate );
                       
            cv.put(MiaTable.DATA, strDate);
non faccio altro!! non riesco a capire perchè è sempre IllegalArgumentException