首页 > 解决方案 > 如何将 DatePickerDialog 中选择的日期发送到 Firebase?

问题描述

我使用 DatePickerDialog 通过单击 TextView 从用户那里获取选定的日期。但问题是我如何将该值(日期)从 TextView 发送到 Firebase?日期可以转换成字符串吗?

TextView startDate;
DatePickerDialog.OnDateSetListener startDateDateSetListener;


startDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DATE, -1);

            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH);
            int day = cal.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dialog = new DatePickerDialog(leaveForm.this, android.R.style.Theme_Holo_Light_Dialog_MinWidth,
                    startDateDateSetListener, year, month, day);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

            dialog.getDatePicker().setMinDate(cal.getTimeInMillis());
            
            dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
            dialog.show();
        }
    });

    startDateDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            month = month + 1;
            Log.d(TAG, "onDateSet: dd/mm/yyy: " + day + "/" + month + "/" + year);

            String date = day + "/" + month + "/" + year;
            startDate.setText(date);
        }
    };

private void applyLeave() {
    String leave_type = leaveType.getSelectedItem().toString(); //Spinner
    
    String start_date = startDate.getText().toString();

    leavedetails = new leaveDetails(leave_type, start_date);

    progressBar.setVisibility(View.VISIBLE);
    reference.child(userID).child("leaveRequest").push().setValue(leavedetails).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                Toast.makeText(leaveForm.this, "Leave Request Sent!", Toast.LENGTH_LONG).show();
                progressBar.setVisibility(View.GONE);
            } else {
                Toast.makeText(leaveForm.this, "Leave Request Failed!", Toast.LENGTH_LONG).show();
                progressBar.setVisibility(View.GONE);
            }
        }
    });
}

我尝试使用String start_date = startDate.getText().toString(); ,但没有运气。

标签: firebasefirebase-realtime-databasedatepickerdatepickerdialog

解决方案


我建议将其存储为时间戳,然后在需要时将其转换回日期和时间。

此示例为您获取日期和时间,但如果您想在该日期获得午夜,则只需将最后三个参数保留为“0”。

Calendar calendar = Calendar.getInstance();
calendar.set(picker.getYear(), picker.getMonth(), picker.getDayOfMonth(), picker.getHours(), picker.getMinutes(), picker.getSeconds());
date = Long.toString(calendar.getTimeInMillis());

这也将确保您可以轻松地将其转换为您将来可能需要的任何时区。


推荐阅读