C#根據時間範圍擷取每月每周的分組

來源:互聯網
上載者:User

標籤:c#   datetime   年月日   每月每周   根據時間範圍擷取每月每周的分組   

C#根據時間範圍擷取每月每周的分組

簡介:C#根據時間範圍擷取每月每周的分組,這個時間範圍可以是多年(2012.01.01-2015.12.31),

           也可以是一年中的幾個月(2015.01.01-2015.12.31),也可以是月個月中的幾個星期

           (2015.01.01-2015.01.21),根據起始日期和結束日期,產生一個以起始日期和結束日期為

           鍵值對的字典(Dictionary<string, string> ),時間倉促,初步寫的演算法,以後再最佳化,目前

           唯一的一點小遺憾就是,月中每周鍵值對的排序問題。詳細代碼如下:

-------------------------------------------------------------------------------------------------------------------------

根據時間範圍擷取每月每周的分組:

    /// <summary>    /// 根據時間範圍擷取每月每周的分組    /// </summary>    /// <param name="strStartDate">起始時間</param>    /// <param name="strEndDate">結束時間</param>    /// <returns>返回每周起始結束索引值對</returns>    /// <remarks>建立人員(日期):★彭振★(150106 11:12)</remarks>    public static Dictionary<string, string> GetGroupWeekByDateRange(string strStartDate, string strEndDate)    {      Dictionary<string, string> dict = new Dictionary<string, string>();      DateTime dtStartDate = DateTime.Parse(strStartDate);      DateTime dtEndDate = DateTime.Parse(strEndDate);      //同年      if (dtStartDate.Year == dtEndDate.Year)      {        GetGroupWeekByYear(dict, dtStartDate, dtEndDate);      }      //不同年      else      {        int WhileCount = dtEndDate.Year - dtStartDate.Year;        //某年一共有多少天        int YearDay = DateTime.IsLeapYear(dtStartDate.Year) ? 366 : 365;        DateTime dtTempStartDate = dtStartDate;        DateTime dtTempEndDate = dtTempStartDate.AddDays(YearDay - dtTempStartDate.DayOfYear);        //根據時間範圍擷取每月每周的分組        GetGroupWeekByYear(dict, dtTempStartDate, dtTempEndDate);        for (int i = 1; i < (WhileCount + 1); i++)        {          //某年某月一共有多少天          YearDay = DateTime.IsLeapYear(dtTempStartDate.Year + 1) ? 366 : 365;          dtTempStartDate = DateTime.Parse(DateTime.Parse((dtTempStartDate.Year + 1) + "." + dtTempStartDate.Month + "." + "01").ToString("yyyy.MM.dd"));          dtTempEndDate = dtTempStartDate.AddDays(YearDay - dtTempStartDate.DayOfYear);          //根據時間範圍擷取每月每周的分組          GetGroupWeekByYear(dict, dtTempStartDate, dtTempEndDate);        }      }      return dict;    }

-------------------------------------------------------------------------------------------------------------------------

根據時間範圍(年)擷取每月每周的分組:

    /// <summary>    /// 根據時間範圍(年)擷取每月每周的分組    /// </summary>    /// <param name="dict">每周起始結束索引值對</param>    /// <param name="strStartDate">起始時間</param>    /// <param name="strEndDate">結束時間</param>    /// <remarks>建立人員(日期):★彭振★(150106 13:58)</remarks>    public static void GetGroupWeekByYear(Dictionary<string, string> dict, DateTime dtStartDate, DateTime dtEndDate)    {      //不同月      if ((dtEndDate.Month - dtStartDate.Month) >= 1)      {        int WhileCount = dtEndDate.Month - dtStartDate.Month;        //某年某月一共有多少天        int MonthDay = DateTime.DaysInMonth(dtStartDate.Year, dtStartDate.Month);        DateTime dtTempStartDate = dtStartDate;        DateTime dtTempEndDate = dtTempStartDate.AddDays(MonthDay - 1);        //根據時間範圍擷取每月每周的分組        GetGroupWeekByMonth(dict, dtTempStartDate, dtTempEndDate);        for (int i = 1; i < (WhileCount + 1); i++)        {          //某年某月一共有多少天          MonthDay = DateTime.DaysInMonth(dtTempStartDate.Year, dtTempStartDate.Month + 1);          dtTempStartDate = DateTime.Parse(DateTime.Parse(dtTempStartDate.Year + "." + (dtTempStartDate.Month + 1) + "." + "01").ToString("yyyy.MM.dd"));          dtTempEndDate = dtTempStartDate.AddDays(MonthDay - 1);          //根據時間範圍擷取每月每周的分組          GetGroupWeekByMonth(dict, dtTempStartDate, dtTempEndDate);        }      }      //同月      else      {        //根據時間範圍擷取每月每周的分組        GetGroupWeekByMonth(dict, dtStartDate, dtEndDate);      }    }

-------------------------------------------------------------------------------------------------------------------------

根據時間範圍(月)擷取每月每周的分組

    /// <summary>    /// 根據時間範圍(月)擷取每月每周的分組    /// </summary>    /// <param name="dict">每周起始結束索引值對</param>    /// <param name="strStartDate">起始時間</param>    /// <param name="strEndDate">結束時間</param>    /// <remarks>建立人員(日期):★彭振★(150106 11:13)</remarks>    public static void GetGroupWeekByMonth(Dictionary<string, string> dict, DateTime dtStartDate, DateTime dtEndDate)    {      //一周      if ((dtEndDate.Day - dtStartDate.Day) < 7)      {        DayOfWeek day = dtStartDate.DayOfWeek;        string dayString = day.ToString();        DateTime dtTempStartDate = dtStartDate;        DateTime dtTempEndDate = dtEndDate;        DateTime dtTempDate = DateTime.Now;        switch (dayString)        {          case "Monday":            dict.Add(dtTempStartDate.ToString(), dtTempEndDate.ToString());            break;          case "Tuesday":            dtTempDate = dtTempStartDate.Date.AddDays(+5);            break;          case "Wednesday":            dtTempDate = dtTempStartDate.Date.AddDays(+4);            break;          case "Thursday":            dtTempDate = dtTempStartDate.Date.AddDays(+3);            break;          case "Friday":            dtTempDate = dtTempStartDate.Date.AddDays(+2);            break;          case "Saturday":            dtTempDate = dtTempStartDate.Date.AddDays(+1);            break;          case "Sunday":            dtTempDate = dtTempStartDate;            break;        }        if (!dayString.Equals("Monday"))        {          dict.Add(dtTempStartDate.ToString(), dtTempDate.ToString());          dtTempDate = dtTempDate.Date.AddDays(+1);          if (DateTime.Compare(dtTempDate, dtEndDate) <= 0)          {            dict.Add(dtTempDate.ToString(), dtTempEndDate.ToString());          }        }      }      //多周      else      {        DayOfWeek day = dtStartDate.DayOfWeek;        string dayString = day.ToString();        DateTime dtTempStartDate = dtStartDate;        DateTime dtTempEndDate = dtEndDate;        DateTime dtTempDate = DateTime.Now;        #region 起始        switch (dayString)        {          case "Monday":            dtTempDate = dtTempStartDate.Date.AddDays(+6);            break;          case "Tuesday":            dtTempDate = dtTempStartDate.Date.AddDays(+5);            break;          case "Wednesday":            dtTempDate = dtTempStartDate.Date.AddDays(+4);            break;          case "Thursday":            dtTempDate = dtTempStartDate.Date.AddDays(+3);            break;          case "Friday":            dtTempDate = dtTempStartDate.Date.AddDays(+2);            break;          case "Saturday":            dtTempDate = dtTempStartDate.Date.AddDays(+1);            break;          case "Sunday":            dtTempDate = dtTempStartDate;            break;        }        dict.Add(dtTempStartDate.ToString(), dtTempDate.ToString());        dtTempStartDate = dtTempDate.Date.AddDays(+1);        #endregion        #region 結束        day = dtEndDate.DayOfWeek;        dayString = day.ToString();        switch (dayString)        {          case "Monday":            dtTempDate = dtEndDate;            break;          case "Tuesday":            dtTempDate = dtEndDate.Date.AddDays(-1);            break;          case "Wednesday":            dtTempDate = dtEndDate.Date.AddDays(-2);            break;          case "Thursday":            dtTempDate = dtEndDate.Date.AddDays(-3);            break;          case "Friday":            dtTempDate = dtEndDate.Date.AddDays(-4);            break;          case "Saturday":            dtTempDate = dtEndDate.Date.AddDays(-5);            break;          case "Sunday":            dtTempDate = dtEndDate.Date.AddDays(-6);            break;        }        dict.Add(dtTempDate.ToString(), dtEndDate.ToString());        dtTempEndDate = dtTempDate.Date.AddDays(-1);        #endregion        int WhileCount = ((dtTempEndDate.Day - dtTempStartDate.Day) / 7);        if (WhileCount == 0)        {          dict.Add(dtTempStartDate.ToString(), dtTempEndDate.ToString());        }        else        {          for (int i = 0; i < (WhileCount + 1); i++)          {            dtTempDate = dtTempStartDate.Date.AddDays(+6);            dict.Add(dtTempStartDate.ToString(), dtTempDate.ToString());            dtTempStartDate = dtTempDate.Date.AddDays(+1); ;          }        }      }    }

-------------------------------------------------------------------------------------------------------------------------

運用:

        //根據時間範圍擷取每月每周的分組        Dictionary<string, string> dict = GetGroupWeekByDateRange("2012.01.01", "2015.12.31");        Dictionary<string, string> dict = GetGroupWeekByDateRange("2015.01.01", "2015.12.31");        Dictionary<string, string> dict = GetGroupWeekByDateRange("2015.01.01", "2015.01.21");




C#根據時間範圍擷取每月每周的分組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.