c#如何把一条数据一个时间段按月份分成多条?我的是月份是从上月的26号到这月的25
而我提交的数据可能会包含多个月份的,但我想让每个月份的都生成一条记录。
如:2011-10-31到2011-12-26我应该分成的记录是
2011-10-31到2011-11-25
2011-11-26到2011-12-25
2011-12-26到2011-12-26
如果为:2011-10-24到2011-12-26我应该分成的记录是
2011-10-24到2011-10-25
2011-10-26到2011-11-25
2011-11-26到2011-12-25
2011-12-26到2011-12-26
而我提交的数据可能会包含多个月份的,但我想让每个月份的都生成一条记录。
如:2011-10-31到2011-12-26我应该分成的记录是
2011-10-31到2011-11-25
2011-11-26到2011-12-25
2011-12-26到2011-12-26
如果为:2011-10-24到2011-12-26我应该分成的记录是
2011-10-24到2011-10-25
2011-10-26到2011-11-25
2011-11-26到2011-12-25
2011-12-26到2011-12-26
2011-10-24到2011-12-26
2011-10-24到2011-10-25
2011-10-26到2011-11-25
2011-11-26到2011-12-25
2011-12-26到2011-12-26
没看懂,你分的一句是什么,另外 DateTime就是一个日期类型,你把你的依据,放上面做更改不就是了
static void Main(string[] args)
{
GetValue(Convert.ToDateTime("2011-10-31"), Convert.ToDateTime("2011-12-26"));
Console.WriteLine("=======================================");
GetValue(Convert.ToDateTime("2011-10-24"), Convert.ToDateTime("2011-12-26"));
}
public static void GetValue(DateTime dt1, DateTime dt2)
{
if (dt2.Month == dt1.Month)
{
Console.WriteLine("{0:yyyy-MM-dd}~{1:yyyy-MM-dd}", dt1, dt2);
return;
}
if (dt1.Day >= 25)
{
Console.WriteLine("{0:yyyy-MM-dd}~{1:yyyy-MM-dd}", dt1, new DateTime(dt1.Year, dt1.Month + 1, 25));
dt1 = new DateTime(dt1.Year, dt1.Month + 1, 26);
}
else
{
Console.WriteLine("{0:yyyy-MM-dd}~{1:yyyy-MM-dd}", dt1, new DateTime(dt1.Year, dt1.Month, 25));
dt1 = new DateTime(dt1.Year, dt1.Month, 26);
}
GetValue(dt1, dt2);
}
/*
2011-10-31~2011-11-25
2011-11-26~2011-12-25
2011-12-26~2011-12-26
=======================================
2011-10-24~2011-10-25
2011-10-26~2011-11-25
2011-11-26~2011-12-25
2011-12-26~2011-12-26
*/
protected void Page_Load(object sender, EventArgs e)
{
DateTime dt1 = new DateTime(2011, 10, 25);
DateTime dt2 = new DateTime(2011, 12, 25);
Response.Write(dt1.ToShortDateString()+"<br/>");
Response.Write(dt2.ToShortDateString() + "<br/>");
InputDateArea(dt1,dt2);
}private void InputDateArea(DateTime dt1, DateTime dt2)
{
if (dt1.Day > 25)
{
if (dt1.AddDays(25 - dt1.Day).AddMonths(1) >= dt2)
{
Response.Write(string.Format("{0}到{1}<br/>", dt1.ToShortDateString(), dt2.ToShortDateString()));
return;
}
else
{
Response.Write(string.Format("{0}到{1}<br/>", dt1.ToShortDateString(), dt1.AddDays(25 - dt1.Day).AddMonths(1).ToShortDateString()));
InputDateArea(dt1.AddDays(25 - dt1.Day+1).AddMonths(1), dt2);
}
}
else
{
if (dt2 > dt1.AddDays(25 - dt1.Day))
{
Response.Write(string.Format("{0}到{1}<br/>", dt1.ToShortDateString(), dt1.AddDays(25 - dt1.Day).ToShortDateString()));
InputDateArea(dt1.AddDays(25 - dt1.Day + 1), dt2);
}
else
{
Response.Write(string.Format("{0}到{1}<br/>", dt1.ToShortDateString(), dt2.ToShortDateString()));
return;
}
}
}
AttendanceInfo atten = null;
List<AttendanceInfo> attendanceList = new List<AttendanceInfo>();
if (BeginDate.Day < 26)
{
if (EndDate.Day < 26 && (EndDate.Month - BeginDate.Month) == 0)
{
//此时是正常的
atten = new AttendanceInfo();
atten.iBegin = int.Parse(BeginDate.ToString("yyyyMMdd"));
atten.iEnd = int.Parse(EndDate.ToString("yyyyMMdd"));
TimeSpan ts = EndDate.Subtract(BeginDate);
atten.sqDays = ts.Days;
attendanceList.Add(atten);
}
else
{
//此时就要分情况了
DateTime tempDate = DateTime.Parse(BeginDate.ToString("yyyyMM25"));
atten = new AttendanceInfo();
atten.iBegin = int.Parse(BeginDate.ToString("yyyyMMdd"));
atten.iEnd = int.Parse(tempDate.ToString("yyyyMMdd"));
TimeSpan ts = EndDate.Subtract(BeginDate);
atten.sqDays = ts.Days;
attendanceList.Add(atten);
BeginDate =DateTime.Parse(BeginDate.ToString("yyyyMM26"));
while (BeginDate.AddMonths(1) < EndDate)
{
DateTime tempEndDate = DateTime.Parse(BeginDate.AddMonths(1).ToString("yyyyMM25"));
atten.iBegin = int.Parse(BeginDate.ToString("yyyyMMdd"));
atten.iEnd = int.Parse(tempEndDate.ToString("yyyyMMdd"));
TimeSpan tempts = tempEndDate.Subtract(BeginDate);
atten.sqDays = tempts.Days;
attendanceList.Add(atten);
BeginDate = BeginDate.AddMonths(1);
}
//此时统计结束的日期即26-enddate
BeginDate = BeginDate.AddMonths(-1);
atten.iBegin = int.Parse(BeginDate.ToString("yyyyMMdd"));
atten.iEnd = int.Parse(EndDate.ToString("yyyyMMdd"));
TimeSpan endts=EndDate.Subtract(BeginDate);
atten.sqDays = endts.Days;
attendanceList.Add(atten);
}
}
else
{
if (EndDate.Day >0&& (EndDate.Month - BeginDate.Month) == 0)
{
//此时是正常的
}
else
{
//此时就要分情况了
}
}
return attendanceList;
}