按月和周数c#获取日期范围 [英] Get Date Range by month and week number c#
本文介绍了按月和周数c#获取日期范围的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有人可以帮我编写一个C#方法,将下面显示的格式数据提取到IEnumebrable中。
我需要将日期范围隔离开来月份也从星期日开始,到星期六结束。
MM WeekNo Week_StartDate Week_EndDate
------------------------------------------
01 1 01-JAN-13 05-JAN-13
01 2 06-JAN-13 12-JAN-13
01 3 13-JAN-13 19-JAN-13
01 4 20-JAN-13 26-JAN-13
01 5 27-JAN-13 31-JAN-13
02 1 01-FEB-13 02-FEB-13
02 2 03-FEB-13 09-FEB-13
02 3 10-FEB-13 16-FEB-13
02 4 17-FEB -13 23-FEB-13
02 5 24-FEB-13 28-FEB-13
解决方案
使用System;
使用System.Collections.Generic;
使用System.Linq;
使用System.Text;
使用System.Collections.Specialized;
使用System.Collections;
namespace WeekRange
{
class program
{
static void Main(string [] args)
{
foreach( WeekRange wr in GetWeekRange(new DateTime(2015,01,05),new DateTime(2015,04,05)))
{
Console.WriteLine({0} {1} {2} { 3,wr.WeekNo,wr.MM,wr.Start.Date.ToShortDateString(),wr.End.ToShortDateString());
}
Console.ReadLine();
}
public static IEnumerable< WeekRange> GetWeekRange(DateTime dtStart,DateTime dtEnd)
{
DateTime fWeekStart,dt,fWeekEnd;
int wkCnt = 1;
if(dtStart.DayOfWeek!= DayOfWeek.Sunday)
{
fWeekStart = dtStart.AddDays(7 - (int)dtStart.DayOfWeek);
fWeekEnd = fWeekStart.AddDays(-1);
IEnumerable< WeekRange> ranges = getMonthRange(new WeekRange(dtStart,fWeekEnd,dtStart.Month,wkCnt ++));
foreach(WeekRange wr in range)
{
yield return wr;
}
wkCnt = ranges.Last()。WeekNo + 1;
}
其他
{
fWeekStart = dtStart;
}
for(dt = fWeekStart.AddDays(6); dt< = dtEnd; dt = dt.AddDays(7))
{
IEnumerable< WeekRange> ranges = getMonthRange(new WeekRange(fWeekStart,dt,fWeekStart.Month,wkCnt ++));
foreach(WeekRange wr in range)
{
yield return wr;
}
wkCnt = ranges.Last()。WeekNo + 1;
fWeekStart = dt.AddDays(1);
}
if(dt> dtEnd)
{
IEnumerable< WeekRange> ranges = getMonthRange(new WeekRange(fWeekStart,dtEnd,dtEnd.Month,wkCnt ++));
foreach(WeekRange wr in range)
{
yield return wr;
}
wkCnt = ranges.Last()。WeekNo + 1;
}
}
公共静态IEnumerable< WeekRange> getMonthRange(WeekRange weekRange)
{
List< WeekRange> ranges = new List< WeekRange>();
if(weekRange.Start.Month!= weekRange.End.Month)
{
DateTime lastDayOfMonth = new DateTime(weekRange.Start.Year,weekRange.Start.Month, 1).AddMonths(1).AddDays(-1);
ranges.Add(new WeekRange(weekRange.Start,lastDayOfMonth,weekRange.Start.Month,weekRange.WeekNo));
ranges.Add(new WeekRange(lastDayOfMonth.AddDays(1),weekRange.End,weekRange.End.Month,weekRange.WeekNo + 1));
}
else
{
ranges.Add(weekRange);
}
返回范围;
}
}
struct WeekRange
{
public DateTime Start;
public DateTime End;
public int MM;
public int WeekNo;
public WeekRange(DateTime _start,DateTime _end,int _mm,int _weekNo)
{
Start = _start;
结束= _end;
MM = _mm;
WeekNo = _weekNo;
}
}
}
< span class =code-keyword> public class WeekRange
{
public string 范围{ get ; set ; }
public DateTime StartDate { get ; set ; }
public DateTime EndDate { get ; set ; }
public int 周{ get 跨度>; set ; }
public int 月{ get 跨度>; set ; }
public int 年{获取跨度>; set ; }
}
public 列表< weekrange> WeekDays(DateTime startDate,DateTime endDate)
{
DateTime startDateToCheck = startDate;
DateTime dateToCheck = startDate;
DateTime dateRangeBegin = dateToCheck;
DateTime dateRangeEnd = endDate;
列表< weekrange> weekRangeList = new 列表< weekrange>();
WeekRange weekRange = new WeekRange();
while ((startDateToCheck.Year < = endDate .Year)&&(startDateToCheck.Month < = endDate.Month)&& dateToCheck < = endDate)
{
int week = 0 ;
while (startDateToCheck.Month == dateToCheck.Month&& dateToCheck < = endDate)
{
周=周+ 1 ;
dateRangeBegin = dateToCheck.AddDays( - ( int )dateToCheck.DayOfWeek);
dateRangeEnd = dateToCheck.AddDays( 6 - ( int )dateToCheck.DayOfWeek);
if ((dateRangeBegin.Date < dateToCheck)&& (dateRangeBegin.Date.Month!= dateToCheck.Month))
{
dateRangeBegin = new DateTime(dateToCheck.Year,dateToCheck.Month,dateToCheck 。天);
}
如果((dateRangeEnd.Date > dateToCheck )&&(dateRangeEnd.Date.Month!= dateToCheck.Month))
{
DateTime dtTo = new DateTime(dateToCheck.Year) ,dateToCheck.Month, 1 );
dtTo = dtTo.AddMonths( 1 );
dateRangeEnd = dtTo.AddDays( - (dtTo.Day));
}
如果(dateRangeEnd.Date > endDate)
{
dateRangeEnd = new DateTime(dateRangeEnd.Year,dateRangeEnd.Month,endDate.Day);
}
weekRange = new WeekRange
{
StartDate = dateRangeBegin,
EndDate = dateRangeEnd,
Range = dateRangeBegin.Date.ToShortDateString()+ ' - ' + dateRangeEnd.Date.ToShortDateString( ),
Month = dateToCheck.Month,
Year = dateToCheck.Year,
Week = week
};
weekRangeList.Add(weekRange);
dateToCheck = dateRangeEnd.AddDays( 1 );
}
startDateToCheck = startDateToCheck.AddMonths( 1 );
}
return weekRangeList;
} < / weekrange > < / weekrange > < / weekrange >
Can some one help me to write a C# method to fetch the below shown format data in to a IEnumebrable .
I need to get the date range segregated along with the month also starting with Sunday and ends with Saturday.
MM WeekNo Week_StartDate Week_EndDate
------------------------------------------
01 1 01-JAN-13 05-JAN-13
01 2 06-JAN-13 12-JAN-13
01 3 13-JAN-13 19-JAN-13
01 4 20-JAN-13 26-JAN-13
01 5 27-JAN-13 31-JAN-13
02 1 01-FEB-13 02-FEB-13
02 2 03-FEB-13 09-FEB-13
02 3 10-FEB-13 16-FEB-13
02 4 17-FEB-13 23-FEB-13
02 5 24-FEB-13 28-FEB-13
解决方案
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.Specialized; using System.Collections; namespace WeekRange { class Program { static void Main(string[] args) { foreach (WeekRange wr in GetWeekRange(new DateTime(2015, 01, 05), new DateTime(2015, 04, 05))) { Console.WriteLine("{0} {1} {2} {3}", wr.WeekNo, wr.MM, wr.Start.Date.ToShortDateString(), wr.End.ToShortDateString()); } Console.ReadLine(); } public static IEnumerable<WeekRange> GetWeekRange(DateTime dtStart, DateTime dtEnd) { DateTime fWeekStart, dt, fWeekEnd; int wkCnt = 1; if (dtStart.DayOfWeek != DayOfWeek.Sunday) { fWeekStart = dtStart.AddDays(7 - (int)dtStart.DayOfWeek); fWeekEnd = fWeekStart.AddDays(-1); IEnumerable<WeekRange> ranges = getMonthRange(new WeekRange(dtStart, fWeekEnd, dtStart.Month, wkCnt++)); foreach (WeekRange wr in ranges) { yield return wr; } wkCnt = ranges.Last().WeekNo+1; } else { fWeekStart = dtStart; } for (dt = fWeekStart.AddDays(6); dt <= dtEnd; dt = dt.AddDays(7)) { IEnumerable<WeekRange> ranges = getMonthRange(new WeekRange(fWeekStart, dt, fWeekStart.Month, wkCnt++)); foreach (WeekRange wr in ranges) { yield return wr; } wkCnt = ranges.Last().WeekNo + 1; fWeekStart = dt.AddDays(1); } if (dt > dtEnd) { IEnumerable<WeekRange> ranges = getMonthRange(new WeekRange(fWeekStart, dtEnd, dtEnd.Month, wkCnt++)); foreach (WeekRange wr in ranges) { yield return wr; } wkCnt = ranges.Last().WeekNo + 1; } } public static IEnumerable<WeekRange> getMonthRange(WeekRange weekRange) { List<WeekRange> ranges = new List<WeekRange>(); if (weekRange.Start.Month != weekRange.End.Month) { DateTime lastDayOfMonth = new DateTime(weekRange.Start.Year, weekRange.Start.Month, 1).AddMonths(1).AddDays(-1); ranges.Add(new WeekRange(weekRange.Start, lastDayOfMonth, weekRange.Start.Month, weekRange.WeekNo)); ranges.Add(new WeekRange(lastDayOfMonth.AddDays(1), weekRange.End, weekRange.End.Month, weekRange.WeekNo + 1)); } else { ranges.Add(weekRange); } return ranges; } } struct WeekRange { public DateTime Start; public DateTime End; public int MM; public int WeekNo; public WeekRange(DateTime _start, DateTime _end, int _mm, int _weekNo) { Start = _start; End = _end; MM = _mm; WeekNo = _weekNo; } } }
public class WeekRange { public string Range { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public int Week { get; set; } public int Month { get; set; } public int Year { get; set; } } public List<weekrange> WeekDays(DateTime startDate, DateTime endDate) { DateTime startDateToCheck = startDate; DateTime dateToCheck = startDate; DateTime dateRangeBegin = dateToCheck; DateTime dateRangeEnd = endDate; List<weekrange> weekRangeList = new List<weekrange>(); WeekRange weekRange = new WeekRange(); while ((startDateToCheck.Year <= endDate.Year) && (startDateToCheck.Month <= endDate.Month) && dateToCheck <= endDate) { int week = 0; while (startDateToCheck.Month == dateToCheck.Month && dateToCheck <= endDate) { week = week + 1; dateRangeBegin = dateToCheck.AddDays(-(int)dateToCheck.DayOfWeek); dateRangeEnd = dateToCheck.AddDays(6 - (int)dateToCheck.DayOfWeek); if ((dateRangeBegin.Date < dateToCheck) && (dateRangeBegin.Date.Month != dateToCheck.Month)) { dateRangeBegin = new DateTime(dateToCheck.Year, dateToCheck.Month, dateToCheck.Day); } if ((dateRangeEnd.Date > dateToCheck) && (dateRangeEnd.Date.Month != dateToCheck.Month)) { DateTime dtTo = new DateTime(dateToCheck.Year, dateToCheck.Month, 1); dtTo = dtTo.AddMonths(1); dateRangeEnd = dtTo.AddDays(-(dtTo.Day)); } if (dateRangeEnd.Date > endDate) { dateRangeEnd = new DateTime(dateRangeEnd.Year, dateRangeEnd.Month, endDate.Day); } weekRange = new WeekRange { StartDate = dateRangeBegin, EndDate = dateRangeEnd, Range = dateRangeBegin.Date.ToShortDateString() + '-' + dateRangeEnd.Date.ToShortDateString(), Month = dateToCheck.Month, Year = dateToCheck.Year, Week = week }; weekRangeList.Add(weekRange); dateToCheck = dateRangeEnd.AddDays(1); } startDateToCheck = startDateToCheck.AddMonths(1); } return weekRangeList; }</weekrange></weekrange></weekrange>
这篇关于按月和周数c#获取日期范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文