1. 程式人生 > >C# 根據時間範圍獲取每年每月每週的分組

C# 根據時間範圍獲取每年每月每週的分組

/// <summary>  
        /// 根據時間範圍獲取每年每月每週的分組  
        /// </summary>  
        /// <param name="strStartDate">起始時間</param>  
        /// <param name="strEndDate">結束時間</param>  
        /// <returns>返回每週起始結束鍵值對</returns>  
        public static Dictionary<int, int> GetGroupWeekByDateRange(string strStartDate, string strEndDate)
        {
            Dictionary<int, int> dict = new Dictionary<int, int>();


            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>  
        public static void GetGroupWeekByYear(Dictionary<int, int> 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>  
        public static void GetGroupWeekByMonth(Dictionary<int, int> 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.Day, dtTempEndDate.Day);
                        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.Day, dtTempDate.Day);
                    dtTempDate = dtTempDate.Date.AddDays(+1);
                    if (DateTime.Compare(dtTempDate, dtEndDate) <= 0)
                    {
                        dict.Add(dtTempDate.Day, dtTempEndDate.Day);
                    }
                }
            }
            //多周  
            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.Day, dtTempDate.Day);


                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.Day, dtEndDate.Day);


                dtTempEndDate = dtTempDate.Date.AddDays(-1);


                #endregion


                int WhileCount = ((dtTempEndDate.Day - dtTempStartDate.Day) / 7);
                if (WhileCount == 0)
                {
                    dict.Add(dtTempStartDate.Day, dtTempEndDate.Day);
                }
                else
                {
                    for (int i = 0; i < (WhileCount + 1); i++)
                    {
                        dtTempDate = dtTempStartDate.Date.AddDays(+6);
                        dict.Add(dtTempStartDate.Day, dtTempDate.Day);
                        dtTempStartDate = dtTempDate.Date.AddDays(+1); ;
                    }
                }
            }
        }  

相關推薦

C# 根據時間範圍獲取每年每月每週分組

/// <summary>          /// 根據時間範圍獲取每年每月每週的分組          /// </summary>          /// <param name="strStartDate">起始時間</pa

根據時間範圍獲取表名(table_prefix)

兩張 hrd amp 跳出循環 業務 rpo stat elf 16px 分表規則為:每月分兩張表.1-15號為 table_prefix_Ym_1 ,16-31號為table_prefix_Ym_2 , 如:table_prefix_201903_1 <

C++ 根據副檔名獲取檔案圖示、型別

轉自:https://blog.csdn.net/liang19890820/article/details/51822438#原始碼 在 Windows 系統中,根據副檔名來區分檔案型別,比如:.txt(文字檔案)、.exe(可執行程式)、.zip(壓縮檔案),下面,根據副檔名來獲取對應的檔案圖

根據時間區間獲取時間區間內所有日期

/** * @param start 開始時間 格式yyyymmdd * @param end 結束時間 格式yyyymmdd * @return list<string>期間的所有日期 */ public static List<Stri

js根據時間獲取格式化日期

//格式化時間戳(毫秒) function getFormatDate(timestamp) { var newDate = new Date(timestamp); Date.prototype.fo

C++根據檔案路徑獲取檔名

#include "stdafx.h" #include <iostream> #include <string> using namespace std; std::string GetPathOrURLShortName(std::

Oracle中根據時間範圍查詢資料

1、當時間條件欄位為字串型別的時候,通過以下方法查詢資料: 1.1、SELECT * FROM 表名 t WHERE 1=1 AND to_date(t.tkdat,'yyyy/MM/dd') between to_date('2017/8/1','yyyy/MM/dd')

mongodb中根據時間範圍進行查詢

時間欄位處於資料頂層結構中 例如: 當前資料庫中有1000條資料,資料的結構為: { "_id" : { "$oid" : "587dc4069f527a223ca81f4f" }, "index" : 664, "creat

c# 根據當前時間獲取,本周,本月,本季度,月初,月末,各個時間段

ble pre 上月 new 。。 datetime test addm [] DateTime dt = DateTime.Now; //當前時間 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") //24小時制 Date

C#根據當前時間獲取,本週,本月,本季度等時間段

 【轉載】http://www.cnblogs.com/jonycaimarcia/archive/2012/12/12/2814735.html     DateTime dt = DateTime.Now;  //當前時間               DateTime

根據時間獲取相應當月每週的分佈

/** * 獲取當前時間 */ function p(s) { return s < 10 ? '0' + s: s; } var myDate = new Date();

c# 根據當前時間獲取,本週,本月,本季度,月初,月末,各個時間段

DateTime dt = DateTime.Now; //當前時間 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") //24小時制 DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")

C#根據字體名通過註冊表獲取該字體文件路徑(win10)

cat mic 約束 lec 運行 window mac war 控件 方法一: 直接先上源碼: private System.Collections.Generic.SortedDictionary<string, string> ReadF

linux c性能測試的時間間隔獲取方法

時間間隔 lock 測試的 double urn 需要 方法 ++ timezone 一、clock_t clock(void)函數   說明:clock_t其實就是long,即長整形。該函數返回值是硬件滴答數,要換算成毫秒或者秒。換算為毫秒需要除以1000,若換算為秒則除

C# 根據磁碟碟符獲取磁碟儲存空間

本章講述:根據磁碟碟符獲取磁碟總的儲存容量和可用儲存容量; /// 獲取指定驅動器的空間總大小(單位為B) /// </summary> /// <param name="str_HardDiskName">只需輸入代表驅動器的字母即可 </param>

oracle中根據時間獲取最新的一條資料

1、select kd.CREATEUSERID as userid,kd.LOCATION,kd.createtime as location from KT_DEVICESTRACK kd where rownum=1 order by kd.createtime 2、SELECT *

javascript 中的時間戳轉換時間 根據時間字元判斷星期幾 根據開始時間結束時間獲取中間間隔時間 來自轉發 javascript 中的時間戳轉換時間 根據時間字元判斷星期幾 根據開始時間結束時間獲取中間間隔時間

javascript 中的時間戳轉換時間 根據時間字元判斷星期幾 根據開始時間結束時間獲取中間間隔時間   //時間戳轉換時間      function timedat(res){   //res 為傳入的時間戳&

javascript 中的時間戳轉換時間 根據時間字符判斷星期幾 根據開始時間結束時間獲取中間間隔時間 來自轉發

獲取 方法 數組 spl == mon 年月日 gety days //時間戳轉換時間 function timedat(res){ //res 為傳入的時間戳 例:1509091800000 var time = new

根據時間獲取時間段時間

/** * Explain: 用於根據時間獲取時間段時間 */ public function start_end_time($time_tyupe_string, $time_string){ switch ($time_tyupe_string) {

獲取指定日期所在一週的時間範圍(週一00:00:00---週日 23:59:59)

/**一週週期相關*/ public class MyWeekDate { /**開始時間*/ public long mLong_begin; /**開始日期*/ public String mStr_begin; /**結束時間*/ public long mLong_end; /**結束日