He hecho esto, aunque no lo he probado, estoy seguro que te ayudará.
Con respecto de las semanas, hará falta saber cómo se delimitan las semanas para hacer algo que te sirva, pero con lo que te he dado, seguro lo sacas en un abrir y cerrar de ojos.
Código Delphi
[-]
procedure TForm1.QuincenasDelAnio(Anio: integer);
var
FechaIni, FechaFin: TDateTime;
begin
FechaIni := EncodeDate(Anio, 1, 1);
FechaFin := EncodeDate(Anio, 1, 15);
while YearOf(FechaIni) = Anio do
begin
Memo1.Lines.Add(DateToStr(FechaIni) + ' - ' + DateToStr(FechaFin));
FechaIni := FechaFin + 1;
if DayOf(FechaIni) = 1 then
FechaFin := FechaIni + 14
else
FechaFin := EncodeDate(YearOf(FechaIni), MonthOf(FechaFin), DaysInAMonth(YearOf(FechaIni), MonthOf(FechaIni)));
end;
end;
procedure TForm1.MesesDelAnio(Anio: Integer);
var
FechaIni, FechaFin: TDateTime;
begin
FechaIni := EncodeDate(Anio, 1, 1);
FechaFin := IncMonth(FechaIni, 1) - 1;
while YearOf(FechaIni) = Anio do
begin
Memo1.Lines.Add(DateToStr(FechaIni) + ' - ' + DateToStr(FechaFin));
FechaIni := FechaFin + 1;
FechaFin := IncMonth(FechaIni, 1) - 1;
end;
end;
Hasta luego.