当前位置: 首页> 科技> 数码 > C# 技巧:如何确定日期时间范围的日周月季度半年

C# 技巧:如何确定日期时间范围的日周月季度半年

时间:2025/9/17 13:31:07来源:https://blog.csdn.net/u013528853/article/details/140624767 浏览次数:3次

现在有个项目我需要编写一个显示当前周开始和结束日期的方法。这让我开始思考其他时间段,如天、月、季度和年。以及如何找到它们的开始和结束日期。

因此,由于我喜欢来自我的开发人员同事的验证,我想与您分享。

Days & Years
日子和年份很容易处理,因为它们有明确的开始和结束。

public static DateTime StartOfDay(this DateTime date)   
{   return date.Date;   
}   public static DateTime EndOfDay(this DateTime date)   
{   return new DateTime(date.Year, date.Month, date.Day, 23, 59, 59);   
}

要找到一天的开始,我们只需要返回 DateTime 的 Date 属性,这将为我们提供时间设置为 00:00:00 的日期。

对于时间结束时,我们创建一个具有相同日期的新 DateTime 对象,但将时间设置为 23:59:59。

public static DateTime StartOfYear(this DateTime date)   
{   return new DateTime(date.Year, 1, 1);   
}   public static DateTime EndOfYear(this DateTime date)   
{   return new DateTime(date.Year, 12, 31, 23, 59, 59);   
}

对于一年的开始,我们创建一个具有相同年份的新 DateTime 对象,但首先将月份和日期设置为 1 月。
对于一年的年底,我们创建一个具有相同年份的新 DateTime 对象,但将月份和日期设置为 12 月 31 日,并将时间设置为 23:59:59。

Week

public static DateTime StartOfWeek(this DateTime date,  DayOfWeek startOfWeekDay = DayOfWeek.Sunday)   
{   while (date.DayOfWeek != startOfWeekDay)   {   date = date.AddDays(-1);   }   return date;   
}   public static DateTime EndOfWeek(this DateTime date,  DayOfWeek startOfWeekDay = DayOfWeek.Sunday)   
{   return date.StartOfWeek(startOfWeekDay).AddDays(7).AddSeconds(-1);   
}

几周来,我们需要考虑一些我们大多数人认为理所当然的事情:我们什么时候开始一周?
在美国和欧洲,工作周从星期一开始,但在世界其他地区(如以色列),工作周从星期日开始。因此,我们需要有一个选项来处理这两种情况,通过使用 DayOfWeek startOfWeekDay 参数来判断一周的第一天是什么。
为了找到一周的开始,我们从当前日期开始,一次返回一天,直到我们到达一周开始的那一天。
要找到一周的结束,我们首先找到一周的开始,然后加上 7 天(到下周的开始),然后回溯 1 秒(到本周的最后一秒)。

Months

public static DateTime StartOfMonth(this DateTime date)   
{   return new DateTime(date.Year, date.Month, 1);   
}   public static DateTime EndOfMonth(this DateTime date)   
{   return new DateTime(date.Year, date.Month,   DateTime.DaysInMonth(date.Year, date.Month), 23, 59, 59);   
}

对于月初,我们创建一个新的 DateTime 对象,该对象具有相同的年份和月份,但将日期设置为 1。
月底有点棘手,因为并非所有月份都有相同的天数,但 DateTime 为我们提供了 DaysInMonth 方法。因此,我们创建一个具有相同年份和月份的新 DateTime 对象,但将月份和日期设置为 _DateTime.DaysInMonth(date.年、日。月)。_我们将时间设置为 23:59:59。

Quarters

public static int QuarterOfTheYear(this DateTime date)   
{   return (int)Math.Ceiling((double)date.Month / 3);   
}   public static DateTime StartOfQuarter(this DateTime date)   
{   var finalMonthOfQuarter= date.QuarterOfTheYear() * 3;   return new DateTime(date.Year, finalMonthOfQuarter— 2, 1);   
}   public static DateTime EndOfQuarter(this DateTime date)   
{   var finalMonthOfQuarter = date.QuarterOfTheYear() * 3;   return new DateTime(date.Year, finalMonthOfQuatr,   DateTime.DaysInMonth(date.Year, finalMonthOfQuarter), 23, 59, 59);   
}

对于季度,我首先需要一种方法来告诉我们我们处于一年中的哪个季度,我们通过将月份除以 3 并使用 Math.Ceiling 四舍五入到最接近的整数来实现这一点。例如:如果我们在 2 月份,我们做 2/3 并得到 0.66,我们四舍五入到 1,看到 2 月份在第一季度。如果我们在 8 月份,我们做 8/3 并得到 2.66,我们将其四舍五入为 3,看到 8 月处于第 3 季度。

要找到季度的开始,我们只需要找到第一个月,我们通过找到最后一个月(季度数乘以 3 )然后回到 2 个月来做到这一点。假设我们处于最后一个季度,4*3 让我们到达 12 月(第 12 个月),如果我们回到 2 个月,我们将到达 10 月。
为了找到季度末,我们使用类似的技术,并将其与我们过去查找一个月天数的方法相结合。

关键字:C# 技巧:如何确定日期时间范围的日周月季度半年

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: