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

解决方案 »

  1.   

    你分的依据是什么啊 
    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就是一个日期类型,你把你的依据,放上面做更改不就是了 
      

  2.   


            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
    */
      

  3.   

    Dim nows As String = Format$(now.AddDays(-10), "Short Date")这是减少10天你把 now换成你的日期即可,先把变量定义成日期型
      

  4.   


    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;
                }
            }
        }
      

  5.   

    自己写了个最笨的写法,也一块分享一下。// TimeSpan ts = EndDate.Subtract(BeginDate);
            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;
        }