《一行代码判断两个日期是否在同一周》由会员分享,可在线阅读,更多相关《一行代码判断两个日期是否在同一周(2页珍藏版)》请在金锄头文库上搜索。
1、一行代码判断两个日期/时间是否在同一周最近在做一个业务系统时,需要判断两个日期是否在同一周,开始没有太去想,就在网上找一下看是否有现成的代码可以复用,找到一个函数如下:经过试验,发现该函数判断不准确,而且该函数的可读性很差,于是自己想了一下,有两种方法可以准确判断出两个日期是否在同一周。方法一原理:日期 1 所在周的星期天和日期 2 所在周的星期天为同一天,表示在同一周。方法二原理:假定日期 dt 为某周的星期天,比如 1752 年 12 月 31 日,则,日期 1 减去 dt 所得天数整除 7 的商等于日期 2 减去 dt 所得天数整除 7 的商,表示在同一周。采用 C#实现上述两种方法如下
2、(以下代码经过严格测试):using System;using System.Collections.Generic;using System.Text;namespace IsInSameWeekclass Programstatic void Main(string args)DateTime dtS = new DateTime(2012, 4, 30);/ / 判断两个日期是否在同一周 / / 开始日期 / 结束日期 / private bool IsInSameWeek(DateTime dtmS, DateTime dtmE) TimeSpan ts = dtmE - dtmS;
3、double dbl = ts.TotalDays; int intDow = Convert.ToInt32(dtmE.DayOfWeek); if (intDow = 0) intDow = 7; if (dbl = 7 | dbl = intDow) return false; else return true; DateTime dtE = new DateTime(2012, 5, 4);bool b1 = IsInSameWeek1(dtE, dtS);Console.WriteLine(string.Format(0:yyyy-MM-dd和1:yyyy-MM-dd在同一周吗? -
4、 2, dtE, dtS, b1);bool b2 = IsInSameWeek2(dtE, dtS - new TimeSpan(2, 0, 0, 0);Console.WriteLine(string.Format(0:yyyy-MM-dd和1:yyyy-MM-dd在同一周吗? - 2, dtE, dtS - new TimeSpan(2, 0, 0, 0), b2);Console.WriteLine(按回车键退出.);Console.Read();/ / 判断两个日期是否在同一周/ / 日期 1/ 日期 2/ 同一周返回 true,否则返回 false/ / 原理:日期 1 所在周的星
5、期天 和 日期 2 所在周的星期天 为同一天,表示在同一周/ public static bool IsInSameWeek1(DateTime dtS, DateTime dtE)return (dtE - new TimeSpan(Convert.ToInt32(dtE.DayOfWeek), 0, 0, 0) - dtE.TimeOfDay) = (dtS - new TimeSpan(Convert.ToInt32(dtS.DayOfWeek), 0, 0, 0) - dtS.TimeOfDay);/ / 判断两个日期是否在同一周/ / 日期 1d/ 日期 2/ 同一周返回 true,
6、否则返回 false/ / 原理:假定日期 dt 为为某周的星期天,比如 1752 年 12 月 31 日,/ 则,日期 1 减去 dt 所得天数整除 7 的商 等于 日期 2 减去 dt 所得天数整除 7 的商,表示在同一周/ public static bool IsInSameWeek2(DateTime dtS, DateTime dtE)/1 秒内有 10,000,000 个计时周期return (dtE - new DateTime(1752, 12, 31).Ticks / (7 * 24 * 60 * 60 * 10000000L) = (dtS - new DateTime(1752, 12, 31).Ticks / (7 * 24 * 60 * 60 * 10000000L);