【问题标题】:Check out date (month) increases in datepicker [duplicate]签出日期选择器中的日期(月)增加[重复]
【发布时间】:2024-01-15 13:54:01
【问题描述】:

大家好!我正在android上构建一个酒店预订应用程序,我的问题是当我通过日期选择器在签入编辑文本中选择一个日期时,签出预订的月份在日期选择器中显示下个月。我该如何解决这个问题?谢谢你。这是我的日期选择器代码行。

    etin = (EditText) findViewById(R.id.etcheckin);
    etin.setInputType(InputType.TYPE_NULL);
    etout = (EditText) findViewById(R.id.etcheckout);
    etout.setInputType(InputType.TYPE_NULL);

    etin.setOnClickListener( new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            showTruitonDatePickerDialog(view);
        }
    });

    etout.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            showToDatePickerDialog(view);
        }
    });
}

public void showTruitonDatePickerDialog(View v){
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}

public void  showToDatePickerDialog(View v){
    DialogFragment newFragment = new ToDatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}

public static class  DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
    public Dialog onCreateDialog(Bundle savedInstanceState){
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.Theme_AppCompat_DayNight_Dialog_Alert, this, year, month, day);

        datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
        c.set(2018,11 ,31);
        datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
        return datePickerDialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user

        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(0);
        cal.set(year, month, day, 0, 0, 0);
        int mont = month + 1;

       etin.setText(mont + "/" + day+ "/" + year);

       // etin.setText((etin.getmonth + 1) + );
    }
}

public static class ToDatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    // Calendar startDateCalendar=Calendar.getInstance();

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker

        String getfromdate = etin.getText().toString();
        String getfrom[] = getfromdate.split("/");
        int year,month,day;
        year= Integer.parseInt(getfrom[2]);
        month = Integer.parseInt(getfrom[0]);
        day = Integer.parseInt(getfrom[1]);
        final Calendar c = Calendar.getInstance();
        c.set(year, month, day + 1);
        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.Theme_AppCompat_DayNight_Dialog_Alert, this, year, month, day);
        datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());

        c.set(2018,11, 31);
        datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
        return datePickerDialog;
    }
    public void onDateSet(DatePicker view, int year, int month, int day) {

        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(0);
        cal.set(year, month, day, 0, 0, 0);


        etout.setText(month + "/" + day + "/" + year);
    }
}

【问题讨论】:

    标签: java android datepicker calendar


    【解决方案1】:

    使用它而不是计算日期并拆分为变量。

     private void chooseDate(final EditText edtdate) {
    
    
            Calendar calDateGiven = Calendar.getInstance();
    
            int year = calDateGiven.get(Calendar.YEAR);
            int month = calDateGiven.get(Calendar.MONTH);
            int day = calDateGiven.get(Calendar.DATE);
            DatePickerDialog datePickerDialog = new DatePickerDialog(this, (view, year1, monthOfYear, dayOfMonth) -> {
                calDateGiven = Calendar.getInstance();
                calDateGiven.set(Calendar.YEAR, year1);
                calDateGiven.set(Calendar.MONTH, monthOfYear);
                calDateGiven.set(Calendar.DATE, dayOfMonth);
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.getDefault());
                String selectedDate = simpleDateFormat.format(calDateGiven.getTime());
                edtdate.setText(selectedDate);
            }, year, month, day);
            try {
                Calendar cal = Calendar.getInstance();
                    datePickerDialog.getDatePicker().setMinDate(cal.getTimeInMillis());
            } catch (Exception e) {
                Toast.makeText(this, getString(R.string.signupFailed), Toast.LENGTH_SHORT).show();
                Log.e("on chooseDate", "Add my contacts", e);
    
            }
            datePickerDialog.show();
        }
    

    【讨论】: