2015-07-14 1 views
3

Я работаю над Android-приложением, в котором я хотел бы сохранить дату и время, введенные пользователем в java.sql.timestamp, и сохранить его. Когда вы снова показываете пользователю, я хотел бы преобразовать его обратно в формат «dd-MM-YYYY» и «HH: MM» отдельно. Мне удалось установить записи, полученные от пользователя, до года, месяца, дня, часа, минуты в отдельных переменных и даже попытаться получить время, но экземпляр календаря всегда возвращает мне текущую дату и время. Я не знаю, что я делаю неправильно. Пожалуйста, дайте мне знать.Android: Преобразование данных с даты, выбор времени из Календаря в sql Временная отметка и обратная.

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

Как вы можете видеть в приведенном выше случае, я получаю информацию от пользователя, и установить его. К сожалению, я не могу установить время, заданное пользователем в Календаре. Вот код для преобразования:

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

      } 
     } 

Что я делаю неправильно? Любая помощь будет приятной. Благодарю.

+0

затем используйте dateformatter и разделите дату sqlite на дату и время, используя два разных форматирования – Pavya

ответ

1

Это как установить Дата 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(); 

И код, чтобы получить его как 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); 

Теперь вы можете конвертировать ваши java.util. Дата в sql Timestamp. Измените формат даты и местонахождение в соответствии с вашими.

Опасайтесь SimpleDateFormat, не являющегося потокобезопасным. Так что используйте TreadLocal, как в приведенном выше коде.

На время: добавьте строку даты из DatePicker с строкой времени из TimerPicker и измените формат на что-то вроде «dd.MM.yyyy HH: mm».

+0

Но у меня также есть время в другом сборщике, где я также хочу сохранить время в метке времени. –

+0

Добавить дату и время в одну строку. String dateTime = DATE_FROM_DATEPCIKER + "" + TIME_FROM_TIMEPICKER; Дата date = stringToDate (dateTime, "dd.MM.yyyy HH: MM", Locale.getDefault()); Дата sql (и время) вы можете получить через: new java.sql.Date (date.getTime()); –

+0

Спасибо, это помогло. –