2015-07-14 1 views
3

Je travaille sur une application Android dans laquelle je voudrais persister la date et l'heure saisies par l'utilisateur dans java.sql.timestamp et l'enregistrer. Lors de l'affichage à nouveau à l'utilisateur, je voudrais le convertir au format comme "jj-MM-YYYY" et "HH: MM", séparément. J'ai réussi à placer les entrées reçues de l'utilisateur à l'année, au mois, au jour, à l'heure, aux minutes dans des variables séparées, et j'ai même essayé d'obtenir l'heure, mais l'instance de calendrier me renvoie toujours la date et l'heure courantes. Je ne sais pas ce que je fais de mal. Veuillez me le faire savoir.Android: Conversion de données à partir de la date, sélecteur de temps à partir de Calendrier en horodatage sql et inverse.

code Android:

Button menuStartDate, menuStartTime; 
EditText startDateTextField, startTimeTextField; 
    int monthOfYear, dayOfWeek, hourOfADay, minuteOfHour, year; 
private Calendar startCalendar; 
@Override 
    public void onClick(View view) { 
     if (view == menuStartDate) { 

      startCalendar = Calendar.getInstance(); 
      year = startCalendar.get(Calendar.YEAR); 
      monthOfYear = startCalendar.get(Calendar.MONTH); 
      dayOfWeek = startCalendar.get(Calendar.DAY_OF_MONTH); 

      DatePickerDialog datePickerDialog = new DatePickerDialog(this, 
        new DatePickerDialog.OnDateSetListener() { 
         @Override 
         public void onDateSet(DatePicker view, int year, 
               int monthOfYear, int dayOfMonth) { 
          startDateTextField.setText(dayOfMonth + "-" 
            + (monthOfYear + 1) + "-" + year); 

         } 
        }, year, monthOfYear, dayOfWeek); 
      datePickerDialog.show(); 
      startCalendar.set(Calendar.MONTH, monthOfYear); 
      startCalendar.set(Calendar.YEAR, year); 
      startCalendar.set(Calendar.DAY_OF_MONTH, dayOfWeek); 

     } 
     if (view == menuStartTime) { 

      startCalendar = Calendar.getInstance(); 
      hourOfADay = startCalendar.get(Calendar.HOUR_OF_DAY); 
      minuteOfHour = startCalendar.get(Calendar.MINUTE); 

      TimePickerDialog timePickerDialog = new TimePickerDialog(this, 
        new TimePickerDialog.OnTimeSetListener() { 
         @Override 
         public void onTimeSet(TimePicker view, int hourOfDay, 
               int minute) { 
          startTimeTextField.setText(hourOfDay + ":" + minute); 
         } 
        }, hourOfADay, minuteOfHour, false); 
      timePickerDialog.show(); 
      startCalendar.set(Calendar.HOUR_OF_DAY, hourOfADay); 
      startCalendar.set(Calendar.MINUTE, minuteOfHour); 
     } 

Comme vous pouvez le voir dans l'exemple ci-dessus, je reçois les informations de l'utilisateur et le mettre. Malheureusement, je ne suis pas en mesure d'obtenir l'heure définie par l'utilisateur dans le calendrier. Voici le code pour la conversion:

if(view == submitMenuButton){ 
      MenuCard menuCard = new MenuCard(); 
      if(!(startDateTextField.getText().toString().length()<1)){ 
        if(!(startTimeTextField.getText().toString().length()<1)){ 
         Timestamp timestamp = new Timestamp(startCalendar.getTimeInMillis()); 
         Log.d("TImestamp is",timestamp.toString()); 

        } else { 
         startTimeTextField.setError("Please select start time"); 
        } 
      }else { 
       startDateTextField.setError("Please select start date"); 

      } 
     } 

Qu'est-ce que je fais mal? Toute aide serait bien. Merci.

+0

puis utiliser datformatter et diviser la date sqlite en date et heure séparément en utilisant deux formats différents – Pavya

Répondre

1

Voici comment régler la date DatePickerDialog:

final Calendar c = Calendar.getInstance(); 
int mYear = c.get(Calendar.YEAR); 
int mMonth = c.get(Calendar.MONTH); 
int mDay = c.get(Calendar.DAY_OF_MONTH); 

DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { 
    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
    // dd.MM.yyyy 
    register_textview_birthday.setText(dayOfMonth + "." + (monthOfYear + 1) + "." + year); 
    } 
}, mYear, mMonth, mDay); 
datePickerDialog.show(); 

Et le code pour le récupérer comme java.util.Date:

public static Date stringToDate(String string, final String format, final Locale locale) throws ParseException { 
    ThreadLocal formater = new ThreadLocal() { 
    protected SimpleDateFormat initialValue() { 
     return new SimpleDateFormat(format, locale); 
    } 
    }; 
    return ((SimpleDateFormat)formater.get()).parse(string); 
} 

Date date = stringToDate(register_textview_birthday.getText().toString().trim(), "dd.MM.yyyy", Locale.ENGLISH); 

Maintenant, vous pouvez convertir votre java.util. Date à horodatage sql. Modifiez le format et les paramètres régionaux en fonction du vôtre.

Prenez garde à ce que SimpleDateFormat ne soit pas thread-safe. Donc, utilisez le TreadLocal comme je l'ai fait dans le code ci-dessus.

Pour l'heure: ajoutez la chaîne de date de DatePicker avec la chaîne de temps de TimerPicker et remplacez le format par quelque chose comme "jj.MM.aaaa HH: mm".

+0

Mais j'ai aussi du temps dans l'autre sélecteur, où je veux aussi enregistrer l'heure en horodatage. –

+0

Ajoutez la date et l'heure à une chaîne. Chaîne dateTime = DATE_FROM_DATEPCIKER + "" + TIME_FROM_TIMEPICKER; Date date = stringToDate (dateTime, "jj.MM.aaaa HH: MM", Locale.getDefault()); La date sql (et l'heure) que vous pouvez obtenir via: new java.sql.Date (date.getTime()); –

+0

Merci, cela a aidé. –