Android: converting data from date, time picking from calendar to sql Timestamp and reverse.

I am working on an Android application where I would like to store the date and time entered by the user in java.sql.timestamp and store it. When showing to the user again, I would like to convert it back to "dd-MM-YYYY" and "HH: MM" format separately. I was able to set the records received from the user to year, month, day, hour, minute in separate variables, and even try to get the time, but the calendar instance always returns me the current date and time. I don't know what I am doing wrong. Please let me know.

Android code:

 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);
        }

      

As you can see in the above instance, I am fetching information from the user and installing it. Unfortunately, I cannot set the time specified by the user in the Calendar. Here's the code to convert:

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");

            }
        }

      

What am I doing wrong? Any help would be appreciated. Thank.

+3


source to share


1 answer


This is how to set the DatePickerDialog date:

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();

      

And the code to get it as 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);

      



Now you can convert your java.util.Date to sql Timestamp. Change the date format and language to suit yours.

Beware that SimpleDateFormat is not thread safe. So use TreadLocal like in the above code.

Per Time: Add a date string from DatePicker with a time string from TimerPicker and change the format to something like "dd.MM.yyyy HH: mm".

+1


source







All Articles