4

特定の曜日にアラームを鳴らす方法を見つけようとしています。私が期待するものを出力するサンプルコードは次のとおりです。

  Calendar calendar = Calendar.getInstance();
  calendar.set(Calendar.WEEK_OF_MONTH, 1);
  System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH)); // Week of month: 1

しかし、これをコードに追加すると、理解できない結果が得られます:

  Calendar calendar = Calendar.getInstance();
  calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
  calendar.set(Calendar.WEEK_OF_MONTH, 1);
  System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH)); // Week of month: 5

特定の週の特定の日にアラームを設定しようとしています。今日は 2013 年 6 月 15 日です。誰か説明してください。Joda 時間は、私がやっていることのオプションではないので、通常の Java ライブラリでこれを機能させる必要があります。すべての助けをありがとう。

編集者注

Calendar.getInstance()上記のコードは、現在の時刻に設定された Calendar を返すため、実行された日付に基づいて異なる結果を返します。現在の時間に依存しない問題の説明については、これを使用します。

DateFormat dateFormat = DateFormat.getDateInstance();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(1371294000000L);
System.out.println(dateFormat.format(calendar.getTime()));
calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println(dateFormat.format(calendar.getTime()));
calendar.set(Calendar.WEEK_OF_MONTH, 1);
System.out.println("Week of month: " + calendar.get(Calendar.WEEK_OF_MONTH)); 
System.out.println(dateFormat.format(calendar.getTime()));

これは次のようなものを出力します (少なくともデフォルトのロケールがグレゴリオ暦を使用している場合):

Jun 15, 2013
Jun 13, 2013
Week of month: 5
May 30, 2013
4

1 に答える 1