Я пытаюсь понять, как сделать будильник в определенный день недели. Вот пример кода, который печатает то, что я ожидаю:
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
Я пытаюсь установить будильник на определенный день на определенной неделе. Сегодня 15 июня 2013 года. Может кто-нибудь объяснить мне это. Время Joda не подходит для того, что я делаю, поэтому мне нужно, чтобы это работало с обычными библиотеками Java. Спасибо за помощь.
Примечание редактора
Приведенный выше код будет возвращать разные результаты в зависимости от даты его запуска, потому что Calendar.getInstance()
возвращает календарь, установленный на текущее время. Для иллюстрации проблемы, которая не зависит от текущего времени, используйте это:
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
Week of month: 1
- person jlordo   schedule 15.06.2013