首页 > 解决方案 > 有没有办法将Android日历的最大日期设置为从当前日期起2个月

问题描述

我尝试获取当前日期,然后计算月龄,但效果不佳。代码如下。

这里显示日历:

        edAnimalDob.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Calendar calendar = Calendar.getInstance();
            int yy = calendar.get(Calendar.YEAR);
            int mm = calendar.get(Calendar.MONTH);
            int dd = calendar.get(Calendar.DAY_OF_MONTH );
            DatePickerDialog dateDialog = new DatePickerDialog(AnimalInsuranceActivity.this, datePickerListener, yy, mm, dd);
            dateDialog.getDatePicker().setMaxDate(new Date().getTime());
            dateDialog.show();
        }
    });

这里我试图计算每月年龄:

    private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH,month) ;
        c.set(Calendar.DAY_OF_MONTH, day);
        format = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
        edAnimalDob.setText(format);
        animalAge = calculateAge(c.getTimeInMillis());
        animalMonthlyAge = calculateMonthlyAge(c.getTimeInMillis());

        //Date format to be used in Premium Activity
        premium_date = new SimpleDateFormat("yyyy/MM/dd").format(c.getTime());
        PetplanInsuranceBase.getInstance().getPetplanInsuranceModel().setPremium_date(premium_date);

        /**
         * Prints out animal age depended on race
         */
         Toast.makeText(AnimalInsuranceActivity.this, String.valueOf(animalMonthlyAge), Toast.LENGTH_SHORT).show();
    }
};

    int calculateMonthlyAge(long date) {
    Calendar dob = Calendar.getInstance();
    dob.setTimeInMillis(date);
    Calendar today = Calendar.getInstance();
    int age = today.get(Calendar. MONTH) - dob.get(Calendar.MONTH) ;
    if (today.get(Calendar.DAY_OF_MONTH) < dob.get(Calendar.DAY_OF_MONTH)) {
        age--;
    }
    return age;
}

由于这种方法不起作用,我认为解决方案是只显示 MaxDate 的日历,从当前日期开始 -2 个月!

我将不胜感激解决方案或任何指导!

标签: androidandroid-studioandroid-calendar

解决方案


  public static void showDatePicker(Activity activity, DatePickerDialog.
        OnDateSetListener listener) {
    Calendar c = Calendar.getInstance();
    int day = c.get(Calendar.DAY_OF_MONTH);
    int month = c.get(Calendar.MONTH);
    int year = c.get(Calendar.YEAR);
    DatePickerDialog dialog = new DatePickerDialog(activity,
            R.style.CDPicker, listener, year, month, day);
    DatePicker picker = dialog.getDatePicker();
    long timeNow = System.currentTimeMillis() - 1000;
    picker.setMinDate(timeNow);
    picker.setMaxDate(timeNow + TWO_MONTHS);
    dialog.show();
}

    private static final long TWO_MONTHS = 60 * 24 * 60 * 60 * 1000;

推荐阅读