Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Calendar. Вычислить кол-во дней в неделе месяца


Автор: smily 18.11.2011, 07:24
Доброго дня.
САБЖ, поясню, входной информацией будут: год, месяц, номер недели в месяце(или может в году).
Необходимо получить кол-во и значения дней в неделе.

Т.е к примеру: 2011 год, ноябрь,4-я неделя.  Результат: 3 дня. 28.11.11, 29.11.11, 30.11.11

Задача не тривиальная, или я ошибаюсь?

Заранее thanks

ЗЫ. копаю Calendar, но чот пока не соображу.


Автор: danilych 18.11.2011, 08:22
номер недели в месяце

public static final int DAY_OF_WEEK_IN_MONTH


Автор: smily 18.11.2011, 08:28
номер недели мне известен.

Автор: firedrago 18.11.2011, 08:28
День недели - 
Код

  int weekday = calendar.get(Calendar.DAY_OF_WEEK);

1 week на сколько мне известно 7 дней smile 
С календарной неделей так же
Код

int week = 10;
int year = 2011;

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.WEEK_OF_YEAR, week);
calendar.set(Calendar.YEAR, year);

Date date = calendar.getTime();

Теперь все просто вычисляется....

Автор: smily 18.11.2011, 08:56
Цитата(firedrago @ 18.11.2011,  08:28)
День недели - 
Код

  int weekday = calendar.get(Calendar.DAY_OF_WEEK);

1 week на сколько мне известно 7 дней smile 
С календарной неделей так же
Код

int week = 10;
int year = 2011;

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.WEEK_OF_YEAR, week);
calendar.set(Calendar.YEAR, year);

Date date = calendar.getTime();

Теперь все просто вычисляется....


ну не мог бы до конца расписать, честно в голову ничего не идёт...

Автор: firedrago 18.11.2011, 16:57
на быструю ногу  smile 
надеюсь, это то, что надо....
Код

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        int year = 2011;
        int month = Calendar.NOVEMBER;
        int weekNr = 4;
        

        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month);
        
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        int kwBegin = calendar.get(Calendar.WEEK_OF_YEAR);
        int maxDaysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.WEEK_OF_YEAR, kwBegin + weekNr);
        
        List<String> dates = new ArrayList<String>();    
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
    
        boolean abort = false;
        for(int i = calendar.get(Calendar.DAY_OF_WEEK); i <= (Calendar.SATURDAY + 1) && !abort; i++){
            dates.add(sdf.format(calendar.getTime()));
            calendar.add(Calendar.DAY_OF_MONTH, 1);
            if(calendar.get(Calendar.DAY_OF_MONTH) == maxDaysInMonth){
                dates.add(sdf.format(calendar.getTime()));
                abort = true;
            }
        }
        
    
        ////////////
        for(String s: dates){
            System.out.println(s);
        }
    }
}



хотя думаю, что тут еще далеко не все условия выполняются.... ну я думаю, смысл понятен ?!

Автор: smily 19.11.2011, 06:47
thx  smile . 
хотел тебе плюсануть, прав не хватает пока )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)