Преобразование даты в строку 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());