Преобразование даты в строку android

При нажатии пользователем на TextView у меня появляется окно выбора даты, месяца и года в том же TextView.

  public class EditActivity extends AppCompatActivity {

private AppDataBase myDB;
private TextView mDisplayDate;
public static final String TAG = "EditActivity";
private DatePickerDialog.OnDateSetListener mDateSetListener;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_layout);
    mDisplayDate = (TextView) findViewById(R.id.tvDates);
    mDisplayDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Calendar cal = Calendar.getInstance();
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH);
            int day = cal.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dialog = new DatePickerDialog(EditActivity.this,
                    android.R.style.Theme_Holo_Dialog_MinWidth, mDateSetListener, year, month, day);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            dialog.show();
        }
    });
    mDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            month = month + 1;
            String date = day + "/" + month + "/" + year;
            mDisplayDate.setText(date);
        }
    };

Далее мне нужно записать параметры которые я заполняла в edit_layout в базу данных и вывести.

Все параметры которые я вводила ранее в EditText (они у меня типа float) у меня адекватно выводятся. Я их преобразовывала в строки следующим образом:

 public void setData(Dann dann) {
        tvVat.setText(String.valueOf(dann.getVat())); 
        tvOm.setText(String.valueOf(dann.getOm()));

}

Как мне в таком случае быть с датой которая прописывается в TextView? Как мне ее преобразовать после записи в бд и вывести?


Ответы (1 шт):

Автор решения: Спицко Дмитрий

В onDateSet лучше сразу преобразовывать введенную дату в формат класса Date. Этот класс хранит в себе число миллисекунд, прошедших с 00:00 01.01.1970 +0UTC. Это же значение вы получаете через System.currentTimeMillis ().

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(0)); //чтобы часы и меньшие поля обнулились
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, day);
long t = cal.getTime().getTime();

t - число, которое можно хранить в бд. Даты в бд вообще хранятся в числе секунд, а не миллисекунд, так что если поделите его на 1000, то из базы тоже можно будет работать с числом как с датой и делать селекты по году, например.

Получить строку для отображения в TextView можно так

SimpleDateFormat sdf = new SimpleDateFormat("yyyy MM dd");
String text = sdf.format(cal.getTime());
→ Ссылка