using System.Collections;
using System.Collections.Generic;
using System.Globalization;
public static class Program
public static void Main()
for(int i=1 ; i<=12; i++){
var month = new DateTime(anio,i,1).financialWeeklyRange().ToList();
Console.WriteLine("----------------------------------");
public static IEnumerable<DateTime> financialWeekly(this DateTime date)
DateTime firstDateOfMonth = new DateTime(date.Year,date.Month,1);
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month);
DateTime lastDateOfMonth = new DateTime(date.Year,date.Month,lastDayOfMonth);
IEnumerable<DateTime> dayOfMonth = firstDateOfMonth.RangeDate(lastDateOfMonth);
List<DateTime> month = new List<DateTime>();
List<Week> weeks = new List<Week>();
var DaysOfMonth = dayOfMonth.ToList().Where(x=>x.DayOfWeek == DayOfWeek.Thursday || x.DayOfWeek == DayOfWeek.Friday);
if(!DaysOfMonth.Contains(firstDateOfMonth)){
month.Add(firstDateOfMonth);
if(!DaysOfMonth.Contains(lastDateOfMonth)){
month.Add(lastDateOfMonth);
month.AddRange(DaysOfMonth);
if(firstDateOfMonth.DayOfWeek == DayOfWeek.Thursday){
month.Remove(firstDateOfMonth);
if(lastDateOfMonth.DayOfWeek == DayOfWeek.Friday){
month.Remove(lastDateOfMonth);
return month.ToList().OrderBy(x=>x).ToList();
public static IEnumerable<Week> financialWeeklyRange(this DateTime date)
List<DateTime> month = date.financialWeekly().ToList();
List<Week> weeks = new List<Week>();
var m= month.Skip(count).Take(2);
weeks.Add(new Week(){ startWeek= m.FirstOrDefault(), endWeek = m.LastOrDefault() });
public static IEnumerable<DateTime> RangeDate(this DateTime startDate, DateTime endDate)
return Enumerable.Range(0, (endDate - startDate).Days + 1).Select(d => startDate.AddDays(d));
public DateTime startWeek{get; set;}
public DateTime endWeek{get; set;}
public override string ToString()
return startWeek.ToString("yyyy/MM/dd")+"-"+endWeek.ToString("yyyy/MM/dd");