android - 有没有办法将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 个月!
我将不胜感激解决方案或任何指导!
解决方案
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;
推荐阅读
- vim - 将 VIM 编辑器中的文本从一个会话拖到另一个会话
- r - tq_transmute 的 tibbletime 产生奇怪的错误,列显然存在但说它不存在
- typescript - 无法将函数分配给具有泛型参数的类型
- excel - Excel VBA秒表在午夜中断
- amazon-web-services - 用户@
: 权限被拒绝 (publickey,gssapi-keyex,gssapi-with-mic) - java - 可访问和可修改的数据?
- php - 输入表单中的“上传”功能,它在本地网络上创建一个文件夹并在其中存储 pdf,以便基于 PHP/Mysql 的本地网络上的 CRUD 应用程序
- c# - 在地图中生成随机游戏对象(无重复)
- c - 为指针算术生成的程序集
- python - “utf-8”编解码器无法解码位置 28 中的字节 0x80:无效的起始字节