Witam, Próbowałem napisać sobie klasę, która generuję daty z podanego zakresu za pomocą zmiennych String from, String to (z pominięciem weekendów) i zapisuję do tablicy Dates.
Nie wiem dlaczego ale kalendarz błędnie pomija miesiąc luty dla przykładowego zakresu "2011-01-03","2011-05-14". Traktuję luty jako kwiecień. Dopiero działa dobrze jak dodam instrukcję calendar.get(Calendar.DAY_OF_MONTH); W poniższym kodzie zakomentowałem tą instrukcję. Oto kod:
[code]
package data_proba;
import java.util.;
import java.text.;
/**
*
-
@Author szarik1988
*/
public class Data_Proba {public static void main(String[] args) {
MyCalendar c1 = new MyCalendar();
c1.AddDatesFromRange("2011-01-03","2011-05-14");
// c1.AddDatesFromRange("2012-01-01","2012-07-07");
//c1.cutFromCalendar("13-06-2011");
c1.printDates();
// while(c1.next()){
// System.out.println(c1.getDate());
//}
}
}
class MyCalendar{
MyCalendar(){
index = -1;
Dates = new ArrayList<String>();
calendar = GregorianCalendar.getInstance();
}
public int daysInMonth(GregorianCalendar c) {
int [] daysInMonths = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
daysInMonths[1] += c.isLeapYear(c.get(GregorianCalendar.YEAR)) ? 1 : 0;
return daysInMonths[c.get(GregorianCalendar.MONTH)];
}
void cutFromCalendar(String date){
Dates.remove(date);
}
public String getDate(){
return Dates.get(index);
}
public boolean next(){
index++;
if(index>=0 && index < Dates.size())
return true;
else
return false;
}
public boolean previous()
{
index--;
if(index>=0 && index < Dates.size())
return true;
else
return false;
}
public void printDates(){
for(int i = 0; i < Dates.size(); i++){
System.out.println(Dates.get(i));
}
}
public void AddDatesFromRange(String from, String to){
int dayF = Integer.parseInt(from.substring(8,10));
int monthF = Integer.parseInt(from.substring(5,7));
int yearF = Integer.parseInt(from.substring(0,4));
calendar.set(Calendar.YEAR,yearF);
calendar.set(Calendar.MONTH,monthF-1);
calendar.set(Calendar.DAY_OF_MONTH,dayF);
int dayT = Integer.parseInt(to.substring(8,10));
int monthT = Integer.parseInt(to.substring(5,7));
int yearT = Integer.parseInt(to.substring(0,4));
int NumberOfDays = daysInMonth((GregorianCalendar)calendar);
while(monthF <= monthT){
while((dayF <= dayT || monthF < monthT) && dayF <= NumberOfDays){
if(calendar.get(Calendar.DAY_OF_WEEK)!= Calendar.SUNDAY &&
calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY ){
Dates.add(yearF +"-"+(monthF < 10 ? "0" : "")+monthF+"-"+(dayF < 10 ? "0" : "")+ dayF);
}
dayF++;
calendar.set(Calendar.DAY_OF_MONTH,dayF);
//calendar.get(Calendar.DAY_OF_MONTH);
}
dayF = 1;
monthF++;
calendar.set(Calendar.MONTH,(monthF-1));
NumberOfDays = daysInMonth((GregorianCalendar)calendar);
}
}
int index;
private Calendar calendar;
private ArrayList<String> Dates;
}
[/code]
Ma ktoś pomysł dlaczego tak się dzieję? To jakaś wada klasy, czy ja mam jakiś błąd w kodzie. Patrze na ten kod i nie mogę znaleźć błędu. Pozdrawiam :)