-2

その月の日を取得して、そのフィールドから実際に日を減算したいと考えています。

注: 日は 2012-09-10 のようにカスタム選択さ​​れます

Date d2 = new SimpleDateFormat("yyyy-M-dd").parse("2012-10-24);

Calendar calendar= Calendar.getInstance();
Calendar csd= Calendar.getInstance();
calendar.setTime(d2);

csd.add(calendar.DAY_OF_MONTH, -5);

csd.add(calendar.get(Calendar.DAY_OF_MONTH), -5)

上記は実際には と言ってエラーになりますIllegalArgumentExceptionが、sysout すると正しい値が出力されます

calendar.DAY_OF_MONTHd2 にある正しい日を出力しません。何か間違ったことをしている場合、またはこれが正しいアプローチではない場合、私は混乱していますか?

アップデート

これが私のコードに正確に含まれているものです。日付範囲の配列が必要です。ユーザーが にある終了日を設定し"2012-8-20"たとしd2ます。過去 30 日分の日付を配列に入れたいのですが、コードが機能しません。

for(int count = 30; count >=1; count--) {
   Calendar csd = Calendar.getInstance();
   csd.add(calendar.DAY_OF_MONTH, -count);
   String dt = (csd.get(Calendar.YEAR)) + "-" + (csd.get(Calendar.MONTH)+1) + "-" + (csd.get(Calendar.DATE));
   aDays[30 - count] = dt;
}
4

2 に答える 2

2
csd.add(calendarEndDate.get(Calendar.DAY_OF_MONTH), -5)

最初のパラメーターは、フィールドのタイプである必要があります。

例:

csd.add(Calendar.DAY_OF_MONTH, -5)

あなたの場合:

calendarEndDate.get(Calendar.DAY_OF_MONTH) 

月の日を返しますが、Calendarどのファイルを変更する必要があるかを期待しています。

カレンダー APIドキュメントを参照してください。

編集:

calendar.add(calendar.DAY_OF_MONTH, -5);
int dayofMonth = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(dayofMont);
于 2012-10-23T21:28:26.623 に答える
1

それは私にとってはうまくいきます。

        Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String)"2012-10-24");

        Calendar calendar= Calendar.getInstance();
        Calendar csd= Calendar.getInstance();
        calendar.setTime(d2);
        calendar.add(calendar.DAY_OF_MONTH, -5);        
        System.out.println(new Date(calendar.getTimeInMillis()));
        csd.add(csd.DAY_OF_MONTH, -5);      
        System.out.println(new Date(csd.getTimeInMillis()));    


csd.add(calendar.get(Calendar.DAY_OF_MONTH), -5);//wrong is giving an invalid argument

アップデート

        String[] aDays = new String[30];
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd");
        for (int count = 30; count >= 1; count--) {
            Calendar csd = Calendar.getInstance();
            csd.add(Calendar.DAY_OF_MONTH, -count);
            aDays[30 - count] = (sdf.format(new Date(csd.getTimeInMillis())));      
        }

        //to double check it
        for (int count = 30; count >= 1; count--) {
            System.out.println(aDays[30 - count]);
        }

これがどのように機能するかを理解するために必要なものがすべて揃っていることを願っています。頑張ってください!

于 2012-10-23T21:32:23.520 に答える