Autore Topic: [DatePicker + SimpleDateFormat] problemi di parsing  (Letto 581 volte)

Offline helldron

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
[DatePicker + SimpleDateFormat] problemi di parsing
« il: 05 Novembre 2011, 18:16:52 CET »
0
Ciao a tutti,
sto recuperando la data inserita da un date picker per memorizzarla in un oggetto date o calendar. Il problema è che qualcosa di strano accade durante l'uso delle API SimpleDateFormat.

L'input è 05 novembre 2011.

Codice: [Seleziona]
DatePicker datePicker =(DatePicker)findViewById(R.id.inputData);
           
Calendar cal = Calendar.getInstance(); 
SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
Date data = new Date(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
cal.setTime(data);
           
Log.i("MAIN_ACTIVITY","date picker = "+datePicker.getYear()+"/"+(datePicker.getMonth()+1)+"/"+datePicker.getDayOfMonth());

Log.i("MAIN_ACTIVITY","data = "+data.toString());

Log.i("MAIN_ACTIVITY","data calendarizzata = "+cal.get(Calendar.DAY_OF_MONTH)+"/"+cal.get(Calendar.MONTH+1)+"/"+cal.get(Calendar.YEAR));

L'output è corretto, almeno fino al datePicker, poi qualcosa di strano accade all'anno. Inoltre sapevo che il mese va incrementato di uno sia al datePicker che al calendar però al calendar sbrocca completamente. Stranamento quando creao la data non c'è bisogno di incrementare il mese di 1:

Codice: [Seleziona]
date picker = 2011/11/5
data = Sun Nov 05 00:00:00 GMT+02:00 3911
data calendarizzata = 5/45/3911

comunque il problema è l'anno che dovrebbe essere 2011 e non 3911 e il mese del calendar che dice 45.
« Ultima modifica: 05 Novembre 2011, 18:18:23 CET da helldron »

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:[DatePicker + SimpleDateFormat] problemi di parsing
« Risposta #1 il: 06 Novembre 2011, 01:16:27 CET »
+1
Codice: [Seleziona]
date picker = 2011/11/5
data = Sun Nov 05 00:00:00 GMT+02:00 3911
data calendarizzata = 5/45/3911

comunque il problema è l'anno che dovrebbe essere 2011 e non 3911 e il mese del calendar che dice 45.

Per quanto riguarda il Date devi sottrarre sempre 1900,per altro è deprecato, ecco cosa dice l'help:
Citazione
java.sql.Date.Date(int theYear, int theMonth, int theDay)

public Date (int theYear, int theMonth, int theDay)
Since: API Level 1

This constructor is deprecated.
Use the constructor Date(long).

Constructs a Date object corresponding to the supplied year, month and day.

Parameters
theYear  the year, specified as the year minus 1900. Must be in the range [0,8099].
theMonth  the month, specified as a number with 0 = January. Must be in the range [0,11].
theDay  the day in the month. Must be in the range [1,31]. 


Per quanto riguarda il mese, devi scrivere il +1 in questo modo:
Codice: [Seleziona]
+ (cal.get(Calendar.MONTH)+1)+
esterno alla parentesi del MONTH

ecco l'esempio modificato e funzionante:
Codice: [Seleziona]
//-------------------------------------------------
                                DatePicker datePicker =(DatePicker)findViewById(R.id.inputData);
                                       
                                Calendar cal = Calendar.getInstance(); 
                               
                                Date data = new Date((datePicker.getYear()-1900), datePicker.getMonth(), datePicker.getDayOfMonth());
                               
                                cal.setTime(data);
                                           
                                Log.i("MAIN_ACTIVITY","date picker = "+(datePicker.getYear())+"/"+(datePicker.getMonth()+1)+"/"+datePicker.getDayOfMonth());

                                Log.i("MAIN_ACTIVITY","data = "+data.toString());

                                Log.i("MAIN_ACTIVITY","data calendarizzata = "+cal.get(Calendar.DAY_OF_MONTH)+"/"+(cal.get(Calendar.MONTH)+1)+"/"+cal.get(Calendar.YEAR));
                                //------------------------------------------------------------
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline helldron

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:[DatePicker + SimpleDateFormat] problemi di parsing
« Risposta #2 il: 06 Novembre 2011, 16:44:42 CET »
0
Grazieeeee!!

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:[DatePicker + SimpleDateFormat] problemi di parsing
« Risposta #3 il: 06 Novembre 2011, 17:15:55 CET »
0
di nulla. :-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .