web-dev-qa-db-ja.com

Android DatePickerを特定の日付に設定

日、月、年の値を含む3つの文字列があります。例えば:

String mday = "02";
String mmonth="07";
String myear="2013";

アクティビティのDatePickerを上記の日付から1か月に設定する必要があります。 mmonth値に1を加算するだけではありません... 31日目の場合、無効な日付になってしまいます。したがって、日付をインクリメントする方法(有効な方法)と、その値でDatePickerを設定する方法が必要です。 int値を使用したdatePickerの設定は、次のように行われることを認識しています。

DatePicker datepicker = (DatePicker) findViewById(R.id.datePicker1); 
datepicker.init(iYear, iMonth, iDay, null); 
// where iYear,iMonth and iDay are integers

しかし、DATEを1か月増やした日、月、年の整数値を取得するにはどうすればよいですか?

それで、増分された日付(整数)の最初の値(文字列)と最後の値の間で、私がしなければならないステップは何ですか?

カレンダーを使わなければならないと思います。したがって、私のコードは次のようになります。

Integer iYear, iMonth, iDay = 0;
String mday = "02";
String mmonth="07";
String myear="2013";

Calendar cal = Calendar.getInstance();
cal.set(Integer.parseInt(myear), Integer.parseInt(mmonth), Integer.parseInt(mday));
cal.add(Calendar.MONTH, 1);
// here I should get the values from cal inside the iYear, iMonth, iDay, but I do not seem to succeed.

DatePicker datepicker = (DatePicker) findViewById(R.id.datePicker1); 
datepicker.init(iYear, iMonth, iDay, null); 

私が行った場合:

datepicker.init(cal.YEAR, cal.MONTH, cal.DATE, null);

その後、アプリケーションがクラッシュします。私は何をすべきか?これを月の日付で増分してDatePickerに設定するにはどうすればよいですか?

更新 テストコードを次のように変更しました。

    Calendar cal = Calendar.getInstance();
    cal.set(2013, 05, 23);
    cal.add(Calendar.MONTH, 1);

    int xxday = cal.get(Calendar.DATE);
    int xxmonth = cal.get(Calendar.MONTH);
    int xxyear = cal.get(Calendar.YEAR);

    datepicker.init(xxyear, xxmonth, xxday, null);

しかし今、datePickerは希望の日付から1か月ではなく、今から1か月に設定されています。したがって、(2013-06-23)の代わりに(2013-09-23)があります。私はそれが原因だと思います

    int xxmonth = cal.get(Calendar.MONTH);

カレンダーのカレンダーから実際の月を取得するにはどうすればよいですか。 ?

7
user1137313

DatePickerクラスにはメソッドupdateDate(year, month, dayOfMonth)があり、以下に示すように、このメソッドを使用してDatePickerに日付を設定できます。

DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker1);
datePicker.updateDate(2016, 5, 22);
16
Hradesh Kumar

暦月は0ベースです。つまり、07月は8月です。

4
Kenny C

日付ピッカーがある場合は、次のコードを使用してカレンダーオブジェクトを初期化します。

Calendar calendar = new GregorianCalendar(datePicker.getYear(),
                               datePicker.getMonth(),
                               datePicker.getDayOfMonth());

それ以外の場合は、コンストラクターで日付部分をハードコーディングします

2
user3764139

このtutoを使用してDatePickerDialogを作成してから、DatePickerDialog内でこのコードを使用してください https://developer.Android.com/guide/topics/ui/dialogs.html

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    String mday = "02";
    String mmonth="07";
    String myear="2013";
    //convert them to int
    int mDay=Integer.valueOf(mday);
    int mMonth=Integer.valueOf(mmonth);
    int mYear=Integer.valueOf(myear);

    return new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
            String d=convertToCompletDate(i2,i1,i);
            mListener.onDatePicked(d);

        }
    },mYear,mMonth,mDay);
}
2