欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中如何自定義配置上周和本周起始日來查詢業(yè)務數據(思路詳解)

 更新時間:2023年09月20日 09:12:45   作者:西瓜程序猿  
在C#中并沒有封裝的方法根據我們需要來直接獲取上一周某天到某天、本周某天到某天,所以需要我們自己封裝方法來實現(我們也可以按照這個思路使用其他語言來實現),感興趣的朋友跟隨小編一起看看吧

在做某個報表管理功能時,有一個需求:需要根據自定義配置的[周起始日]來統(tǒng)計上周、本周的訂單數據。在C#中并沒有封裝的方法根據我們需要來直接獲取上一周某天到某天、本周某天到某天,所以需要我們自己封裝方法來實現(我們也可以按照這個思路使用其他語言來實現)。

前言

在做某個報表管理功能時,有一個需求:需要根據自定義配置的[周起始日]來統(tǒng)計上周、本周的訂單數據。在C#中并沒有封裝的方法根據我們需要來直接獲取上一周某天到某天、本周某天到某天,所以需要我們自己封裝方法來實現(我們也可以按照這個思路使用其他語言來實現)。

一、需求與思路

需求是這樣的,我們需要根據自定義配置的[周起始日]來統(tǒng)計上周、本周的訂單數據,具體看下文介紹。

1.1-需求介紹

舉個例子:假設今天是【2023年9月19日(星期二)】,若配置的是【周一】,那么上周要查詢的時間是從上周一計數到上周日(2023年9月11日——2023年9月17日),那么本周要查詢的時間是本周一計數到本周日(2023年9月18日——2023年9月24日)。

若配置的是【周日】,那么上周要查詢的時間是從上上周日計數到上周六(2023年9月10日——2023年9月16日),那么本周要查詢的時間是上周日計數到本周六(2023年9月17日——2023年9月23日)?!咀⒁猓阂驗樯衔募僭O今天是2023年9月19日(星期二),而配置的是(星期日),當還未到這一天,所有需要取離最近的上一周的星期日】

另外一個場景,如果假設今天是【2023年9月24日(星期日)】,若配置的是【周日】,那么上周要查詢的時間是從上周日計數到本周六(2023年9月17日——2023年9月23日),那么本周要查詢的時間是上周日計數到本周六(2023年9月24日——2023年9月30日)。

1.2-開發(fā)思路

第一步:首先新建了一個配置表,來存儲我們配置的是星期幾,[西瓜程序猿]這邊存的是字符串數字(1-7),1表示星期一,2表示星期二,7表示星期日,以此類推。

第二步【核心】:根據配置的[周起始日]來計算出,上一周要查詢的數據從哪一天開始到哪一天結束,本周要查詢的數據應該從哪一天開始到哪一天結束(本文代碼演示主要就是介紹這一塊邏輯)。

第三步:根據計算出來的開始/結束日期,來根據[訂單創(chuàng)建的時間](根據自己業(yè)務需求)來和計算出來的日期判斷即可。

二、代碼實現

2.1-封裝

        /// <summary>
        /// 獲得上周、本周配置時間(用于讀取數據)
        /// </summary>
        /// <param name="startWeekDay">配置的[周起始日]</param>
        /// <param name="now">當前時間</param>
        /// <returns></returns>
        public (string upper_week_begin, string upper_week_end, string this_week_begin, string this_week_end) GetWeekTimeStr(int startWeekDay, DateTime now)
		{
			if (startWeekDay <  1 || startWeekDay > 7)
			{
                throw new ArgumentOutOfRangeException(nameof(startWeekDay), "startWeekDay must be between 1 and 7.");
            }
            int currentDayOfWeek = (int)now.DayOfWeek;//獲取當前日期為星期幾
            DateTime currentDate = DateTime.Now.Date; //獲取到當前日期
            string upper_week_begin, upper_week_end, this_week_begin, this_week_end;
            //如果配置的星期 大于 當前星期
            if (startWeekDay > currentDayOfWeek || startWeekDay == currentDayOfWeek)
            {
                DayOfWeek week = DayOfWeek.Monday;
                switch (startWeekDay)
                {
                    case 1: week = DayOfWeek.Monday; break;
                    case 2: week = DayOfWeek.Tuesday; break;
                    case 3: week = DayOfWeek.Wednesday; break;
                    case 4: week = DayOfWeek.Thursday; break;
                    case 5: week = DayOfWeek.Friday; break;
                    case 6: week = DayOfWeek.Saturday; break;
                    case 7: week = DayOfWeek.Sunday; break;
                    default:
                        break;
                }
                DateTime lastThursday = GetDayOfWeek(currentDate, week);//本周的開始日期
                DateTime lastWeekSunday = lastThursday.AddDays(6);//本周的結束日期,根據[本周開始日期]往后推6天
                DateTime lastLastThursday = GetDayOfWeek(lastThursday.AddDays(-1), week);//根據本周的開始時間,往前推1天,找到上一周的開始時間
                DateTime lastLastWeekSunday = lastLastThursday.AddDays(6);//上一周的結束時間
                upper_week_begin = lastLastThursday.ToString("yyyy-MM-dd");
                upper_week_end = lastLastWeekSunday.ToString("yyyy-MM-dd");
                this_week_begin = lastThursday.ToString("yyyy-MM-dd");
                this_week_end = lastWeekSunday.ToString("yyyy-MM-dd");
            }
            else
            {
                //返回本周和上周的開始和結束日期
                DateTime thisWeekMonday = GetDayOfWeek(now, DayOfWeek.Monday);//本周的開始日期
				DateTime thisWeekSunday = thisWeekMonday.AddDays(6); //本周的結束日期,根據[本周開始日期]往后推6天
                DateTime lastWeekMonday = thisWeekMonday.AddDays(-7);//根據[本周開始日期],往前推7天,得到[上周開始時間]
                DateTime lastWeekSunday = thisWeekMonday.AddDays(-1);//根據[本周的開始日期],往前推1天,得到[上周結束時間]
                upper_week_begin = lastWeekMonday.ToString("yyyy-MM-dd");
                upper_week_end = lastWeekSunday.ToString("yyyy-MM-dd");
                this_week_begin = thisWeekMonday.ToString("yyyy-MM-dd");
                this_week_end = thisWeekSunday.ToString("yyyy-MM-dd");
            }
			return (upper_week_begin, upper_week_end, this_week_begin, this_week_end);
        }
        /// <summary>
        /// 獲取上一個指定星期的日期
        /// </summary>
        /// <param name="date"></param>
        /// <param name="targetDayOfWeek"></param>
        /// <returns></returns>
        public static DateTime GetDayOfWeek(DateTime date, DayOfWeek targetDayOfWeek)
        {
            int diff = (7 + (date.DayOfWeek - targetDayOfWeek)) % 7;
            return date.AddDays(-diff).Date;
        }

2.2-使用

var item = GetWeekTimeStr(startWeekDay, now);
// 取出數據
if (!string.IsNullOrEmpty(item.upper_week_begin))
{
}
if (!string.IsNullOrEmpty(item.upper_week_end))
{
}
if (!string.IsNullOrEmpty(item.this_week_begin))
{
}
if (!string.IsNullOrEmpty(item.this_week_end))
{
}

然后根據查詢出來的時間段,應用到自己需要的業(yè)務場景即可。

到此這篇關于在C#中如何自定義配置上周和本周起始日來查詢業(yè)務數據的文章就介紹到這了,更多相關C#查詢業(yè)務數據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于C# TabPage如何隱藏的問題

    關于C# TabPage如何隱藏的問題

    TabPage沒有Visible屬性,所以只能通過設置將其與父控件(tabcontrol)的關聯性去除就好了,如下面代碼:
    2013-04-04
  • C#微信公眾號與訂閱號接口開發(fā)示例代碼

    C#微信公眾號與訂閱號接口開發(fā)示例代碼

    這篇文章主要介紹了C#微信公眾號與訂閱號接口開發(fā)示例代碼,結合實例形式簡單分析了C#針對微信接口的調用與處理技巧,需要的朋友可以參考下
    2016-06-06
  • 詳解C#讀取Appconfig中自定義的節(jié)點

    詳解C#讀取Appconfig中自定義的節(jié)點

    我們往往需要在App.config中自定義一些節(jié)來滿足實際需要,而不依賴于App.config的appSettings,下面通過一個簡單的實例來說明自定義配置節(jié)點的設置與讀取
    2015-06-06
  • C# PropertyGrid使用案例詳解

    C# PropertyGrid使用案例詳解

    這篇文章主要介紹了C# PropertyGrid使用案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C#實現串口通信詳解

    C#實現串口通信詳解

    串口通信(Serial Communications)是指外設和計算機間通過數據信號線、地線等按位(bit)進行傳輸數據的一種通信方式,屬于串行通信方式,能夠實現遠距離通信,本文給大家介紹了C#串口通信總結,需要的朋友可以參考下
    2024-12-12
  • C#使用Shader實現夜幕降臨倒計時的效果

    C#使用Shader實現夜幕降臨倒計時的效果

    這篇文章主要介紹了C#使用Shader實現夜幕降臨倒計時的效果,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • C#泛型類型知識講解

    C#泛型類型知識講解

    這篇文章主要介紹了C#泛型類型知識,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • 淺析C# 9.0 新特性之 Lambda 棄元參數

    淺析C# 9.0 新特性之 Lambda 棄元參數

    這篇文章主要介紹了C# 9.0 新特性之 Lambda 棄元參數的的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,想學習c#的朋友可以了解下
    2020-06-06
  • C# 標準事件流實例代碼

    C# 標準事件流實例代碼

    這篇文章主要介紹了C# 標準事件流的實例代碼,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#微信公眾號開發(fā) 微信事件交互

    C#微信公眾號開發(fā) 微信事件交互

    這篇文章主要介紹了C#微信公眾號開發(fā),微信事件交互的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論