获取 本周、本月、本年 的开始或结束时间

news/2024/7/6 0:57:10

获取 本周、本月、本年 的开始或结束时间

 
 public class DateTimeUtil
    {
        // 获取 本周、本月、本年 的开始或结束时间
        /// <summary>
        /// 获取开始时间
        /// </summary>
        /// <param name="TimeType">Week、Month、Year</param>
        /// <param name="NowTime">当前时间</param>
        /// <returns></returns>
        public static string GetStarTimetByType(string TimeType, DateTime NowTime)
        {
            switch (TimeType)
            {
                case "Week":
                    return NowTime.AddDays((7 - (int)NowTime.DayOfWeek) % 7 - 7 + 1).ToString("yyyy-MM-dd 00:00:00");
                case "Month":
                    return NowTime.AddDays(-NowTime.Day + 1).ToString("yyyy-MM-dd 00:00:00");
                case "Year":
                    return NowTime.AddDays(-NowTime.DayOfYear + 1).ToString("yyyy-MM-dd 00:00:00");
                default://出错啦!!!
                    throw new NotImplementedException();
            }
        }
        /// <summary>
        /// 获取结束时间
        /// </summary>
        /// <param name="TimeType">Week、Month、Year</param>
        /// <param name="NowTime">当前时间</param>
        /// <returns></returns>
        public static string GetEndTimeByType(string TimeType, DateTime NowTime)
        {
            switch (TimeType)
            {
                case "Week":
                    return NowTime.AddDays((7 - (int)NowTime.DayOfWeek) % 7).ToString("yyyy-MM-dd 23:59:59");
                case "Month":
                    return NowTime.AddDays(-NowTime.AddMonths(1).Day + 1).AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd 23:59:59");
                case "Year":
                    return NowTime.AddDays(-NowTime.DayOfYear + 1).AddYears(1).AddDays(-1).ToString("yyyy-MM-dd 23:59:59");
                default://出错啦!!!
                    throw new NotImplementedException();
            }
        }
        /// <summary>
        /// 根据第几周 获取开始时间和结束时间
        /// </summary>
        /// <param name="week">第几周</param>
        /// <param name="month">当前时间的月份</param>
        /// <returns></returns>
        public static Tuple<DateTime, DateTime> GetWeeks(int? week, int? month)
        {
            DateTime dt = DateTime.Parse($"{DateTime.Now.Year}-{month.Value}-{DateTime.Now.Day}");
            string[] arrDate0 = new string[6];
            string[] arrDate1 = new string[6];
            //年
            int year = dt.Year;
            //月
            //当前月第一天
            DateTime weekStart = new DateTime(year, month.Value, 1);
            //该月的最后一天
            DateTime monEnd = weekStart.AddMonths(1).AddDays(-1);
            int i = 1;
            //当前月第一天是星期几
            int dayOfWeek = Convert.ToInt32(weekStart.DayOfWeek.ToString("d"));
            //该月第一周结束日期
            DateTime weekEnd = dayOfWeek == 0 ? weekStart : weekStart.AddDays(7 - dayOfWeek);
            string content = "";
            // content += "第" + i + "周起始日期: " + weekStart.ToShortDateString() + "   结束日期: " + weekEnd.ToShortDateString() + "\n";
            arrDate0[0] = weekStart.ToString("yyyy-MM-dd 00:00:00");
            arrDate1[0] = weekEnd.ToString("yyyy-MM-dd 23:59:59");
 
            //当日期小于或等于该月的最后一天
            while (weekEnd.AddDays(1) <= monEnd)
            {
                i++;
                //该周的开始时间
                weekStart = weekEnd.AddDays(1);
                //该周结束时间
                weekEnd = weekEnd.AddDays(7) > monEnd ? monEnd : weekEnd.AddDays(7);
                arrDate0[i - 1] = weekStart.ToString("yyyy-MM-dd 00:00:00");
                arrDate1[i - 1] = weekEnd.ToString("yyyy-MM-dd 23:59:59");
            }
            content += year + "年" + month + "月共有" + i + "周\n";
            return Tuple.Create(DateTime.Parse(arrDate0[week.Value]), DateTime.Parse(arrDate1[week.Value]));
        }
   }

http://lihuaxi.xjx100.cn/news/951818.html

相关文章

条款10:优先考虑限域enum而非未限域enum

通常来说&#xff0c;在花括号中声明一个名字会限制它的作用域在花括号之内。但这对于C98风格的enum中声明的枚举名&#xff08;译注&#xff1a;enumerator&#xff0c;连同下文“枚举名”都指enumerator&#xff09;是不成立的。这些枚举名的名字&#xff08;译注&#xff1a…

3.ffmpeg命令行环境搭建、ffmpeg命令行初步了解

在上章,我们讲过: ffmpeg.exe: 主要用于转码或者剪切的应用程序, 也可以从url/现场音频/视频源抓取输入源ffplay.exe: 主要用于播放视频的应用程序,该应用程序源码是开源的,我们后面章节会去源码分析ffprobe.exe: 主要用于分析视频码流的应用程序, 可以获取媒体文件的详细信息,…

Kubernetes11:配置管理-Secret(实际下载secret插件进行加密)-ConfigMap

Kubernetes11&#xff1a;配置管理-Secret 但是secrei在生产环境中会下载secret插件进行加密。只是老师没演示。 Secret 作用&#xff1a;加密数据存在etcd里面&#xff0c;让Pod容器以挂载Volume方式进行访问 场景&#xff1a;凭证 Base64 &#xff1a; 1、创建secret 加密…

【Leedcode】栈和队列必备的面试题(第二期)

【Leedcode】栈和队列必备的面试题&#xff08;第二期&#xff09; 文章目录【Leedcode】栈和队列必备的面试题&#xff08;第二期&#xff09;一、题目&#xff08;用两个队列实现栈&#xff09;二、思路图解1.定义两个队列2.初始化两个队列3.往两个队列中放入数据4.两个队列出…

论文阅读-DISTILLING KNOWLEDGE FROM READER TORETRIEVER FOR QUESTION ANSWERING

论文链接&#xff1a;https://arxiv.org/pdf/2012.04584.pdf 目录 方法 交叉注意机制 交叉注意力得分作为段落检索的相关性度量 用于段落检索的密集双编码器 将交叉注意力分数提取到双编码器 数据集 方法 我们的系统由两个模块组成&#xff0c;即检索器和阅读器&#xf…

HUN工训中心:电路暂态响应测量实验报告

工训中心的牛马实验 实验目的&#xff1a; 1.培训应用示波器测量电路暂响应过程的技能。观测RC一阶电路暂态过程的动态曲线&#xff0c;测量其时间常数及作为积分应用特性。 2.观测RLC二阶电路暂态过程的三种状态轨迹&#xff0c;测量并分析其参数。 实验仪器和器材&#xff…

for循环的用法

1.always-for用法 注意点&#xff1a; ①always块可以是时序逻辑&#xff0c;也可以是组合逻辑&#xff1b; ②always块内的for循环的变量定义为integer类型。 举例&#xff1a;做一些merge的时候比较常用&#xff0c;此时需要在每次循环开始对data赋初值。比如这里merge处置设…

【C语言】位段

位段 一.简介 位段和结构体很相似。不同的是&#xff1a; 位段的成员&#xff1a;成员名 : 数字且其成员必须是整型(char、int、unsigned int……) 示例&#xff1a; struct S {char a : 3;char b : 2;char c : 7; };S就是一个位段类型&#xff0c;其成员a为占3个比特位的…