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