最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

前言

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

一、需求與思路

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

1.1-需求介紹

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

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

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

1.2-開發(fā)思路

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

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

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

二、代碼實現(xiàn)

2.1-封裝

        /// <summary>
        /// 獲得上周、本周配置時間(用于讀取數(shù)據(jù))
        /// </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);//本周的結(jié)束日期,根據(jù)[本周開始日期]往后推6天
                DateTime lastLastThursday = GetDayOfWeek(lastThursday.AddDays(-1), week);//根據(jù)本周的開始時間,往前推1天,找到上一周的開始時間
                DateTime lastLastWeekSunday = lastLastThursday.AddDays(6);//上一周的結(jié)束時間
                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
            {
                //返回本周和上周的開始和結(jié)束日期
                DateTime thisWeekMonday = GetDayOfWeek(now, DayOfWeek.Monday);//本周的開始日期
				DateTime thisWeekSunday = thisWeekMonday.AddDays(6); //本周的結(jié)束日期,根據(jù)[本周開始日期]往后推6天
                DateTime lastWeekMonday = thisWeekMonday.AddDays(-7);//根據(jù)[本周開始日期],往前推7天,得到[上周開始時間]
                DateTime lastWeekSunday = thisWeekMonday.AddDays(-1);//根據(jù)[本周的開始日期],往前推1天,得到[上周結(jié)束時間]
                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);
// 取出數(shù)據(jù)
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))
{
}

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

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

相關(guān)文章

  • c#實現(xiàn)輸出的字符靠右對齊的示例

    c#實現(xiàn)輸出的字符靠右對齊的示例

    下面小編就為大家分享一篇c#實現(xiàn)輸出的字符靠右對齊的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 基于.NET編寫工具類解決JSON亂碼問題

    基于.NET編寫工具類解決JSON亂碼問題

    在開發(fā)過程中,我們經(jīng)常會遇到JSON數(shù)據(jù)處理的問題,尤其是在數(shù)據(jù)傳輸和解析過程中,很容易出現(xiàn)編碼錯誤導致的亂碼問題,下面我們就來編寫一個.NET工具類來解決這一問題吧
    2025-03-03
  • C# 腳本引擎RulesEngine的使用詳解

    C# 腳本引擎RulesEngine的使用詳解

    這篇文章主要介紹了C# 腳本引擎RulesEngine的使用方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#連接數(shù)據(jù)庫的方法

    C#連接數(shù)據(jù)庫的方法

    ASP.NET連接數(shù)據(jù)庫的技術(shù)叫ADO.NET,它是用來向數(shù)據(jù)庫提交sql語句的一堆類。這里連接的是Sql Server 2008數(shù)據(jù)庫,其他數(shù)據(jù)庫用法差不多,就是調(diào)用的類名不一樣
    2015-11-11
  • C#實現(xiàn)的Socket服務(wù)器端、客戶端代碼分享

    C#實現(xiàn)的Socket服務(wù)器端、客戶端代碼分享

    這篇文章主要介紹了C#實現(xiàn)的Socket服務(wù)器端、客戶端代碼分享,2個非常簡單的入門例子,需要的朋友可以參考下
    2014-08-08
  • C#中的委托介紹

    C#中的委托介紹

    這篇文章主要介紹了C#中的委托介紹,本文講解了聲明委托的方式、匿名方法、多播委托等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • C#操作DataTable的實現(xiàn)步驟

    C#操作DataTable的實現(xiàn)步驟

    本文主要介紹了C#操作DataTable的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • C#對NULL的簡化賦值的方法總結(jié)

    C#對NULL的簡化賦值的方法總結(jié)

    在C#中,對null賦值意味著將引用類型的變量設(shè)置為無引用或者說空引用,當你聲明一個引用類型的變量,如果沒有給它初始化具體的對象,那么它的值就是null,本文給大家介紹了C#對NULL的簡化賦值的方法總結(jié),需要的朋友可以參考下
    2024-11-11
  • Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體

    Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體

    這篇文章主要為大家介紹了Winform?控件優(yōu)化LayeredWindow實現(xiàn)無鋸齒圓角窗體示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • C#實現(xiàn)批量刪除PDF頁面(單頁/多頁)的實戰(zhàn)技巧

    C#實現(xiàn)批量刪除PDF頁面(單頁/多頁)的實戰(zhàn)技巧

    在自動化文檔處理流程中,PDF 文件可能因?qū)С鲥e誤、內(nèi)容重復(fù)或格式轉(zhuǎn)換問題而包含多余頁面,本文演示如何使用免費庫 Free Spire.PDF for .NET 刪除 PDF 文件中的單個或多個頁面,希望對大家有所幫助
    2026-04-04

最新評論

镇平县| 榆树市| 增城市| 固原市| 安新县| 蛟河市| 卢湾区| 锡林浩特市| 淮安市| 会理县| 渑池县| 广宗县| 天柱县| 衡山县| 扎鲁特旗| 兰坪| 皋兰县| 得荣县| 南京市| 平塘县| 沽源县| 华容县| 墨玉县| 姜堰市| 巴东县| 莎车县| 分宜县| 岗巴县| 富锦市| 从化市| 阳朔县| 阿坝县| 兴义市| 洮南市| 高唐县| 内黄县| 静宁县| 城固县| 唐山市| 大田县| 中阳县|