1. 程式人生 > >android開發時為日期控制元件設定選擇範圍,再次點選時顯示上次選擇日期

android開發時為日期控制元件設定選擇範圍,再次點選時顯示上次選擇日期


下面做的是:28天<= 日期 <=65週歲

//計算28天前的日期

public static final long _MAX_TIME = 28 * 24 * 60 * 60 * 1000L;
int inComingYear;
int inComingMonth;
int inComingDay;            


Calendar calendarIn = Calendar.getInstance();

//設定系統時間是防止初始化日期控制元件時“日”顯示為空

calendarIn.setTime(new Date(System.currentTimeMillis() - _MAX_TIME));

//傳入的日期一定要在監聽外設定,否者再次點選不能顯示上次所選日期,而顯示當前日期

inComingYear = calendarIn.get(Calendar.YEAR);
inComingMonth = calendarIn.get(Calendar.MONTH);
inComingDay = calendarIn.get(Calendar.DAY_OF_MONTH);
insuredAge.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// TODO Auto-generated method stub


long curTime = System.currentTimeMillis();
long maxTime = curTime - _MAX_TIME;


// 當前日期的65年前的日期
Calendar calendar2 = Calendar.getInstance();
// 得到一個Calendar的例項
calendar2.setTime(new Date());
// 設定時間為當前時間
calendar2.add(Calendar.YEAR, -65);
// 年份減1
Date minTimeCurrent = calendar2.getTime(); // 結果


DatePickerDialog datePickerDialog = new DatePickerDialog(
LifeHappyWinnerProductTrialActivity.this, Datelistener,
inComingYear, inComingMonth, inComingDay);

DatePicker datePicker = datePickerDialog.getDatePicker();

//一定要先設定最小值,再設定最大值,否則程式會崩

datePicker.setMinDate(minTimeCurrent.getTime());
datePicker.setMaxDate(maxTime);
datePickerDialog.show();
}

});



private DatePickerDialog.OnDateSetListener Datelistener = new DatePickerDialog.OnDateSetListener() {
/**
* params:view:該事件關聯的元件 params:myyear:當前選擇的年 params:monthOfYear:當前選擇的月
* params:dayOfMonth:當前選擇的日
*/
@Override
public void onDateSet(DatePicker view, int myyear, int monthOfYear,
int dayOfMonth) {


// 修改year、month、day的變數值,以便以後單擊按鈕時,DatePickerDialog上顯示上一次修改後的值
inComingYear = myyear;
inComingMonth = monthOfYear;
inComingDay = dayOfMonth;
// 更新日期


String month;
String dayof;
if ((monthOfYear + 1) < 10) {
month = "0" + (monthOfYear + 1);
} else {
month = (monthOfYear + 1) + "";
}
if (dayOfMonth < 10) {
dayof = "0" + dayOfMonth;
} else {
dayof = dayOfMonth + "";
}


ageDay = myyear + "-" + month + "-" + dayof;


SimpleDateFormat format = new SimpleDateFormat("yyyy");
int NowYear = Integer.parseInt(format.format(new Date()));
SimpleDateFormat formatM = new SimpleDateFormat("MM");
int monthNow = Integer.parseInt(formatM.format(new Date()));
SimpleDateFormat formatD = new SimpleDateFormat("dd");
int dayOfMonthNow = Integer.parseInt(formatD.format(new Date()));

                        
//年齡計算,當大於當前日期就減一歲,小於當前日期就加一歲
ageShow = NowYear - myyear;


if (monthNow <= monthOfYear + 1) {


if (monthNow == monthOfYear + 1) {


if (dayOfMonthNow < dayOfMonth)


ageShow--;


} else {


ageShow--;


}


}
if (ageShow < 0) {
ageShow = 0;
}


if (ageShow <= 65) {
insuredAge.setText(ageShow + "");
} else {
insuredAge.setText("");
showAlert("被保險人不能超過65週歲");
}





}


};



下面是28天前的日期




下面是65週歲前的日期