6

平日に応じて日付に1ヶ月を足すようにしています。たとえば、日付は9月の3月曜日です。追加した後、10月の3.月曜日が欲しいです。次の日付に1か月追加してみました

Mon Sep 17 17:30:00 MESZ 2012

このコードで:

Calendar date = Calendar.getInstance();
date.setTimeInMillis(date_in_mil);
date.add(Calendar.DAY_OF_WEEK_IN_MONTH, 3); 

しかし、私は得ました

Mon Oct 08 17:30:00 MESZ 2012

これは10月の第2月曜日であり、第3月曜日ではありません。誰かがこれがどのように機能するか考えていますか?

編集 これは私が以下の答えのように使用した解決策です:

int prevDayOfWeek = date.get(Calendar.DAY_OF_WEEK);
date.add(Calendar.MONTH, 1);
date.set(Calendar.DAY_OF_WEEK, prevDayOfWeek);
date.set(Calendar.DAY_OF_WEEK_IN_MONTH, week);

wereby weekは、1か月の週の数です。たとえば、1は最初の例、2は2番目の例、というように続きます。ただし、週は逆方向にカウントすることもできます。たとえば、-1は月の最後の週を意味します。

4

6 に答える 6

12

月の第3月曜日を取得したい場合は、 set代わりにを使用してくださいadd
date.set(Calendar.DAY_OF_WEEK_IN_MONTH, 3);

現在の日付に1か月を追加する場合は、
date.add(Calendar.MONTH, 1);

編集

final Calendar date = Calendar.getInstance();
date.set(2012, Calendar.SEPTEMBER, 17);

int prevDayOfWeekInMonth = date.get(Calendar.DAY_OF_WEEK_IN_MONTH);
int prevDayOfWeek = date.get(Calendar.DAY_OF_WEEK);

date.add(Calendar.MONTH, 1);
date.set(Calendar.DAY_OF_WEEK, prevDayOfWeek);
date.set(Calendar.DAY_OF_WEEK_IN_MONTH, prevDayOfWeekInMonth);
于 2012-10-15T16:27:20.380 に答える
1

Calendarクラスのメソッドを使用します。Calendarクラスのroll()メソッドとは異なり add()言及されている日付の部分のみを変更します。

例えば:

public class Cal {

    public static void main(String[] args){

        Calendar c = Calendar.getInstance();

        c.roll(Calendar.MONTH, 1);

        System.out.println(c.getTime());
    }

}
于 2012-10-15T16:39:11.953 に答える
1

月を追加する場合は、次のようにします。

Calendar date = Calendar.getInstance();
date.setTimeInMillis(date_in_mil);
date.add(Calendar.MONTH, 1);

4週間追加したい場合は、

Calendar date = Calendar.getInstance();
date.setTimeInMillis(date_in_mil);
date.add(Calendar.DAY_OF_WEEK_IN_MONTH, 4);

週を常に第3週として維持するには:

if(date.get(Calendar.WEEK_OF_MONTH)<3){
   date.add(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
 }

またはより良い

date.add(Calendar.DAY_OF_WEEK_IN_MONTH, 3-date.get(Calendar.WEEK_OF_MONTH);
于 2012-10-15T16:31:53.607 に答える
0
Calendar c= Calendar.getInstance();
System.out.println(c.get(Calendar.DATE));//if this is 2nd monday of September
System.out.println(c.WEEK_OF_MONTH);
c.add(c.WEEK_OF_MONTH, 4);
System.out.println(c.get(Calendar.DATE));//prints the 2 monday of october
于 2012-10-15T16:31:39.393 に答える
0

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

一貫性のない情報。フィールドが競合する場合、カレンダーは最近設定されたフィールドを優先します。たとえば、日を決定するとき、カレンダーは次のフィールドの組み合わせのいずれかを探します。最近設定された単一フィールドによって決定された最新の組み合わせが使用されます。

 MONTH + DAY_OF_MONTH
 MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
 MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
 DAY_OF_YEAR
 DAY_OF_WEEK + WEEK_OF_YEAR
于 2012-10-15T16:32:11.267 に答える
-1

文字列の日付がdd/mm / yyyyのソリューション:

String mes = null;
String yourfecha = null;
if(yourfecha.substring(5,6).equals("/")){
mes = yourfecha.substring(3,5)
}else{
mes = yourfecha.substring(4,6)
}
Integer newmes = Integer.valueOf(mes)+{How many months want to add};
String anyo = yourfecha.substring(6,10);
String newFecha=null;
if(newmes >12){            
newmes=newmes-12;
Integer newanyo=Integer.valueOf(anyo)+1;
newFecha=yourfecha.substring(0,2)+"/0"+newmes + "/"+newanyo;       
}else{
newFecha=yourfecha.substring(0,4)+newmes+"/"+anyo;  
}   
return newFecha;
于 2017-03-24T10:34:09.627 に答える