如何把一个时间段按月拆分

时间:2021-08-15 11:24:31
比如有个时间段 2013-6-8 -》2013-7-8

我想拆分为 

2013-6-8 2013-6-30 
2013-7-1 2013-7-8

           

            //DateTime s_d = Convert.ToDateTime(startdate);
            //DateTime e_d = Convert.ToDateTime(enddate);
            //for (; s_d < e_d; )
            //{
            //    Response.Write(s_d.ToString("yyyy-MM-dd"));
            //    Response.Write(s_d.AddMonths(1)
            //}

15 个解决方案

#1


你是用程序拆呢,还是用SQL语句来拆?

#2


DateTime dt = new DateTime(nYear, nMonth, 1);
dt = dt.AddDays(-1); //一个月的最后一天,就是下一个月的第一天减一

2013-7-1就不用说了吧;

#3


利用程序拆分

#4


如何把一个时间段按月拆分帮顶!

#5


引用 3 楼 fjwzw 的回复:
利用程序拆分


二楼的应该可以。构建下一个月第一天的DateTime对象,再减1天。

#6


该回复于2013-12-10 09:19:46被管理员删除

#7


那只能对比yyyyMM就可以了呀

#8


DateTime dtstatrt = new DateTime(2013,06,08);
DateTime dtstatrtDay = dtstatrt.AddMonths(1);//月份加1
//取出开始月最后一天
DateTime dtstatrtEndDay = Convert.ToDateTime(dtstatrtDay.Year.ToString() + "-" + dtstatrtDay.Month.ToString() + "-" + "1").AddDays(-1);
TimeSpan ts = dtstatrtEndDay - dtstatrt;
var test = string.Empty;
for(int i=1;i<ts.Days+1;i++)
{
test += dtstatrt.AddDays(i).ToShortDateString()+"\r\n";
}
MessageBox.Show(test);

下面的一样。参考下吧。写的不好。

#9



//赋值
List<DateTime> lst = new List<DateTime>();
lst.Add(new DateTime(2013, 9, 30, 00, 30, 00));
lst.Add(new DateTime(2013, 10, 1, 00, 31, 01));
lst.Add(new DateTime(2013, 10, 30, 00, 40, 01));

//分段
var query = from t in lst.AsEnumerable()
            group t by t.ToString("yyyyMMddHHmi").Substring(0, 6) into g
            select new
            {
                _date = g.Key,
                _lst = g.ToList<DateTime>()
            };
//显示
StringBuilder buider = new StringBuilder();
foreach (var vq in query)
{
    foreach (var item in vq._lst)
    {
        buider.Append(vq._date + " " + item + "\n");
    }
}
MessageBox.Show(buider.ToString());

#10


string BeginDate = "2013-06-08";
            string EndDate = "2014-10-18";

            if (Convert.ToDateTime(BeginDate) > Convert.ToDateTime(EndDate))
            {
                MessageBox.Show("开始日期大于结束日期!!");
                return;
            }
            
            if (BeginDate.Substring(0,7).Equals(EndDate.Substring(0,7)))
            {
                textBox1.Clear();
                textBox1.AppendText(BeginDate + " ~ " + EndDate);
                return;
            }

            textBox1.Clear();
            textBox1.AppendText(BeginDate + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
            int i = 1;
            while (Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i) < Convert.ToDateTime(EndDate.Substring(0, 8) + "01"))
            {
                textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i + 1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
                i++;
            }
            textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + EndDate + "\n");

#11


 BeginDate有可能是  "2013-6-8";


引用 10 楼 zbdzjx 的回复:
string BeginDate = "2013-06-08";
            string EndDate = "2014-10-18";

            if (Convert.ToDateTime(BeginDate) > Convert.ToDateTime(EndDate))
            {
                MessageBox.Show("开始日期大于结束日期!!");
                return;
            }
            
            if (BeginDate.Substring(0,7).Equals(EndDate.Substring(0,7)))
            {
                textBox1.Clear();
                textBox1.AppendText(BeginDate + " ~ " + EndDate);
                return;
            }

            textBox1.Clear();
            textBox1.AppendText(BeginDate + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
            int i = 1;
            while (Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i) < Convert.ToDateTime(EndDate.Substring(0, 8) + "01"))
            {
                textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i + 1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
                i++;
            }
            textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + EndDate + "\n");

#12



StringBuilder sbuider = new StringBuilder();

DateTime dt1 = Convert.ToDateTime("2013-6-8");
DateTime dt2 = Convert.ToDateTime("2013-10-02");
int i = 0;
for (; i < dt2.Month - dt1.Month; i++ )
{
    string start = dt1.AddMonths(i).AddDays(-dt1.AddMonths(i).Day + 1).ToString();
    string end = dt1.AddMonths(i).AddMonths(1).AddDays(-dt1.AddMonths(i).Day).ToString();
    sbuider.Append(start + " " + end + "\n");
}
if (i != 0)
{
    sbuider.Append(dt2.AddDays(-dt2.Day + 1).ToString() + " " + dt2.ToString());
}

MessageBox.Show(sbuider.ToString());

#13


可以先格式化一下日期格式,将2013-6-8转换成2013-06-08。
也就是:Convert.ToDateTime("2013-6-8").ToString("yyyy-MM-dd")

引用 11 楼 fjwzw 的回复:
 BeginDate有可能是  "2013-6-8";


Quote: 引用 10 楼 zbdzjx 的回复:

string BeginDate = "2013-06-08";
            string EndDate = "2014-10-18";

            if (Convert.ToDateTime(BeginDate) > Convert.ToDateTime(EndDate))
            {
                MessageBox.Show("开始日期大于结束日期!!");
                return;
            }
            
            if (BeginDate.Substring(0,7).Equals(EndDate.Substring(0,7)))
            {
                textBox1.Clear();
                textBox1.AppendText(BeginDate + " ~ " + EndDate);
                return;
            }

            textBox1.Clear();
            textBox1.AppendText(BeginDate + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
            int i = 1;
            while (Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i) < Convert.ToDateTime(EndDate.Substring(0, 8) + "01"))
            {
                textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i + 1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
                i++;
            }
            textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + EndDate + "\n");

#14


            System.Text.StringBuilder sbuider = new System.Text.StringBuilder();

            DateTime dt1 = Convert.ToDateTime("2013-6-8"); 
            DateTime dt2 = Convert.ToDateTime("2013-6-9"); 
            int ii = 0;
            string start = "", end = "";

            for (; ii < dt2.Month - dt1.Month; ii++)
            {
                if (dt1.AddMonths(ii).AddDays(-dt1.AddMonths(ii).Day + 1) < dt1)
                {
                    start = dt1.ToString("yyyy-MM-dd");
                }
                else
                {
                    start = dt1.AddMonths(ii).AddDays(-dt1.AddMonths(ii).Day + 1).ToString("yyyy-MM-dd"); 

                }
                end = dt1.AddMonths(ii).AddMonths(1).AddDays(-dt1.AddMonths(ii).Day).ToString("yyyy-MM-dd");
                sbuider.Append(start + " " + end + "\n");
            }
            if (ii != 0)
            {
                sbuider.Append(dt2.AddDays(-dt2.Day + 1).ToString("yyyy-MM-dd") + " " + dt2.ToString("yyyy-MM-dd"));
            }
            else
            {
                start = dt1.ToString("yyyy-MM-dd");
                end = dt2.ToString("yyyy-MM-dd");

                sbuider.Append(start + " " + end);

            }
                Response.Write(sbuider);


以上可以实现时间段按月份进行拆分。

如果我想用一个循环把时间段按月份拆分,该怎么处理

#15


准备结贴,我把所有结果以,分割后存入字符串,用的时候在进行分割即可。

#1


你是用程序拆呢,还是用SQL语句来拆?

#2


DateTime dt = new DateTime(nYear, nMonth, 1);
dt = dt.AddDays(-1); //一个月的最后一天,就是下一个月的第一天减一

2013-7-1就不用说了吧;

#3


利用程序拆分

#4


如何把一个时间段按月拆分帮顶!

#5


引用 3 楼 fjwzw 的回复:
利用程序拆分


二楼的应该可以。构建下一个月第一天的DateTime对象,再减1天。

#6


该回复于2013-12-10 09:19:46被管理员删除

#7


那只能对比yyyyMM就可以了呀

#8


DateTime dtstatrt = new DateTime(2013,06,08);
DateTime dtstatrtDay = dtstatrt.AddMonths(1);//月份加1
//取出开始月最后一天
DateTime dtstatrtEndDay = Convert.ToDateTime(dtstatrtDay.Year.ToString() + "-" + dtstatrtDay.Month.ToString() + "-" + "1").AddDays(-1);
TimeSpan ts = dtstatrtEndDay - dtstatrt;
var test = string.Empty;
for(int i=1;i<ts.Days+1;i++)
{
test += dtstatrt.AddDays(i).ToShortDateString()+"\r\n";
}
MessageBox.Show(test);

下面的一样。参考下吧。写的不好。

#9



//赋值
List<DateTime> lst = new List<DateTime>();
lst.Add(new DateTime(2013, 9, 30, 00, 30, 00));
lst.Add(new DateTime(2013, 10, 1, 00, 31, 01));
lst.Add(new DateTime(2013, 10, 30, 00, 40, 01));

//分段
var query = from t in lst.AsEnumerable()
            group t by t.ToString("yyyyMMddHHmi").Substring(0, 6) into g
            select new
            {
                _date = g.Key,
                _lst = g.ToList<DateTime>()
            };
//显示
StringBuilder buider = new StringBuilder();
foreach (var vq in query)
{
    foreach (var item in vq._lst)
    {
        buider.Append(vq._date + " " + item + "\n");
    }
}
MessageBox.Show(buider.ToString());

#10


string BeginDate = "2013-06-08";
            string EndDate = "2014-10-18";

            if (Convert.ToDateTime(BeginDate) > Convert.ToDateTime(EndDate))
            {
                MessageBox.Show("开始日期大于结束日期!!");
                return;
            }
            
            if (BeginDate.Substring(0,7).Equals(EndDate.Substring(0,7)))
            {
                textBox1.Clear();
                textBox1.AppendText(BeginDate + " ~ " + EndDate);
                return;
            }

            textBox1.Clear();
            textBox1.AppendText(BeginDate + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
            int i = 1;
            while (Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i) < Convert.ToDateTime(EndDate.Substring(0, 8) + "01"))
            {
                textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i + 1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
                i++;
            }
            textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + EndDate + "\n");

#11


 BeginDate有可能是  "2013-6-8";


引用 10 楼 zbdzjx 的回复:
string BeginDate = "2013-06-08";
            string EndDate = "2014-10-18";

            if (Convert.ToDateTime(BeginDate) > Convert.ToDateTime(EndDate))
            {
                MessageBox.Show("开始日期大于结束日期!!");
                return;
            }
            
            if (BeginDate.Substring(0,7).Equals(EndDate.Substring(0,7)))
            {
                textBox1.Clear();
                textBox1.AppendText(BeginDate + " ~ " + EndDate);
                return;
            }

            textBox1.Clear();
            textBox1.AppendText(BeginDate + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
            int i = 1;
            while (Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i) < Convert.ToDateTime(EndDate.Substring(0, 8) + "01"))
            {
                textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i + 1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
                i++;
            }
            textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + EndDate + "\n");

#12



StringBuilder sbuider = new StringBuilder();

DateTime dt1 = Convert.ToDateTime("2013-6-8");
DateTime dt2 = Convert.ToDateTime("2013-10-02");
int i = 0;
for (; i < dt2.Month - dt1.Month; i++ )
{
    string start = dt1.AddMonths(i).AddDays(-dt1.AddMonths(i).Day + 1).ToString();
    string end = dt1.AddMonths(i).AddMonths(1).AddDays(-dt1.AddMonths(i).Day).ToString();
    sbuider.Append(start + " " + end + "\n");
}
if (i != 0)
{
    sbuider.Append(dt2.AddDays(-dt2.Day + 1).ToString() + " " + dt2.ToString());
}

MessageBox.Show(sbuider.ToString());

#13


可以先格式化一下日期格式,将2013-6-8转换成2013-06-08。
也就是:Convert.ToDateTime("2013-6-8").ToString("yyyy-MM-dd")

引用 11 楼 fjwzw 的回复:
 BeginDate有可能是  "2013-6-8";


Quote: 引用 10 楼 zbdzjx 的回复:

string BeginDate = "2013-06-08";
            string EndDate = "2014-10-18";

            if (Convert.ToDateTime(BeginDate) > Convert.ToDateTime(EndDate))
            {
                MessageBox.Show("开始日期大于结束日期!!");
                return;
            }
            
            if (BeginDate.Substring(0,7).Equals(EndDate.Substring(0,7)))
            {
                textBox1.Clear();
                textBox1.AppendText(BeginDate + " ~ " + EndDate);
                return;
            }

            textBox1.Clear();
            textBox1.AppendText(BeginDate + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
            int i = 1;
            while (Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i) < Convert.ToDateTime(EndDate.Substring(0, 8) + "01"))
            {
                textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i + 1).AddDays(-1).ToString("yyyy-MM-dd") + "\n");
                i++;
            }
            textBox1.AppendText(Convert.ToDateTime(BeginDate.Substring(0, 8) + "01").AddMonths(i).ToString("yyyy-MM-dd") + " ~ " + EndDate + "\n");

#14


            System.Text.StringBuilder sbuider = new System.Text.StringBuilder();

            DateTime dt1 = Convert.ToDateTime("2013-6-8"); 
            DateTime dt2 = Convert.ToDateTime("2013-6-9"); 
            int ii = 0;
            string start = "", end = "";

            for (; ii < dt2.Month - dt1.Month; ii++)
            {
                if (dt1.AddMonths(ii).AddDays(-dt1.AddMonths(ii).Day + 1) < dt1)
                {
                    start = dt1.ToString("yyyy-MM-dd");
                }
                else
                {
                    start = dt1.AddMonths(ii).AddDays(-dt1.AddMonths(ii).Day + 1).ToString("yyyy-MM-dd"); 

                }
                end = dt1.AddMonths(ii).AddMonths(1).AddDays(-dt1.AddMonths(ii).Day).ToString("yyyy-MM-dd");
                sbuider.Append(start + " " + end + "\n");
            }
            if (ii != 0)
            {
                sbuider.Append(dt2.AddDays(-dt2.Day + 1).ToString("yyyy-MM-dd") + " " + dt2.ToString("yyyy-MM-dd"));
            }
            else
            {
                start = dt1.ToString("yyyy-MM-dd");
                end = dt2.ToString("yyyy-MM-dd");

                sbuider.Append(start + " " + end);

            }
                Response.Write(sbuider);


以上可以实现时间段按月份进行拆分。

如果我想用一个循环把时间段按月份拆分,该怎么处理

#15


准备结贴,我把所有结果以,分割后存入字符串,用的时候在进行分割即可。