C#计算时间间隔和时间所属区间的通用操作方法-创新互联
在.net项目中,对DateTime的相关操作使用的比较多,例如时间格式的转换,时间间隔的计算,时间所属的区间计算等,在这些要求中,虽然使用起来较为的简单,但是在转换的过程中,较为容易出错,花费的时间也较多,现在总结一些常用的时间操作方法,以便在项目开发中节省时间。
创新互联公司从2013年创立,先为五华等服务建站,五华等地企业,进行企业商务咨询服务。为五华企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。一下代码中需要使用到如下的实体类:
////// 周(星期)信息实体类 /// [Serializable] public class WeekInfo { ////// 周(星期)信息实体类 /// public WeekInfo() { Number = 0; BeginDate = DateTime.MinValue; EndDate = DateTime.MaxValue; } ////// 周数 /// public int Number { get; set; } ////// 开始时间 /// public DateTime BeginDate { get; set; } ////// 结束时间 /// public DateTime EndDate { get; set; } ////// 输出第几周和日期间隔 /// ///默认格式: ///第几周,从2012年12月21日至2112年12月21日。 ///第几周和日期间隔 public override string ToString() { return string.Format("第{0}周,从{1}至{2}。", Number, BeginDate.ToString("yyyy年MM月dd日"), EndDate.ToString("yyyy年MM月dd日")); } ////// 输出第几周 /// /// 少于2位时是否补零 ///第几周 public string GetWeekString(bool isFill) { string format = "第{0}周"; if (isFill && Number < 10) format = "第0{0}周"; return string.Format(format, Number); } ////// 输出日期间隔 /// /// 输出格式化字符串 /// 日期格式化字符串 ///日期间隔 public string GetDateString(string inputString, string dateString) { if (string.IsNullOrWhiteSpace(inputString) || string.IsNullOrWhiteSpace(dateString)) return null; try { return string.Format(inputString, BeginDate.ToString(dateString), EndDate.ToString(dateString)); } catch (Exception ex) { return ex.Message; } } }
1.获得年度第一个周一的日期:
////// 获得年度第一个周一的日期 /// /// 需要计算的年份 /// 年度第一周是否跳过跨年的周数 /// 年度第一个周一偏移量 ///年度第一个周一的日期 public static DateTime WeekOfFirstDay(int year, bool jumpYear, out int offset) { var firstDate = YearOfFirstDay(year); //该年的第一天 var firstWeek = (int)firstDate.DayOfWeek; //该年的第一天是周几 offset = 0; //周一偏移量 switch (firstWeek) { case 1: //星期一 offset = 0; break; case 2: //星期二 offset = jumpYear ? 6 : -1; break; case 3: //星期三 offset = jumpYear ? 5 : -2; break; case 4: //星期四 offset = jumpYear ? 4 : -3; break; case 5: //星期五 offset = jumpYear ? 3 : -4; break; case 6: //星期六 offset = jumpYear ? 2 : -5; break; case 0: //星期日 offset = jumpYear ? 1 : -6; break; } firstDate = firstDate.AddDays(offset); return firstDate; }
2.获得年度周(星期)信息实体集合列表:
////// 获得年度周(星期)信息实体集合列表 /// /// 需要计算的年份 /// 年度第一周是否跳过跨年的周数 ///周(星期)信息实体集合列表对象 public static IListWeekOfList(int year, bool jumpYear) { IList weekList = new List (); if (year <= 0001 || year >= 9999) return weekList; var offset = 0; var firstDate = WeekOfFirstDay(year, jumpYear, out offset); //年度周一的日期 var index = 1; while (true) { if (index > 54) break; var weekInfo = new WeekInfo { Number = index, BeginDate = firstDate, EndDate = firstDate.AddDays(6) }; weekList.Add(weekInfo); firstDate = firstDate.AddDays(7); //下周 if (jumpYear) { if (firstDate.Year != year) break; } else { if (firstDate.AddDays(6).Year != year) break; } index++; } return weekList; }
3.获得某年第某周的开始日期和结束日期:
////// 获得某年第某周的开始日期和结束日期 /// /// 需要计算的年份 /// 需要计算的周数 /// 年度第一周是否跳过跨年的周数 /// 开始日期 /// 结束日期 public static void WeekOfDate(int year, int weekNumber, bool jumpYear, out DateTime weekBeginDate, out DateTime weekEndDate) { weekBeginDate = DateTime.MinValue; weekEndDate = DateTime.MaxValue; if (year <= 0001 || year >= 9999 || weekNumber < 1 || weekNumber > 54) return; int offset; var firstDate = WeekOfFirstDay(year, jumpYear, out offset); //年度周一的日期 firstDate = firstDate.AddDays((weekNumber - 1) * 7); weekBeginDate = firstDate; weekEndDate = firstDate.AddDays(6); }
4.获得某个日期属于某年的第几周:
////// 获得某个日期属于某年的第几周 /// /// 需要计算的日期 /// 年度第一周是否跳过跨年的周数 ///某年的第几周 public static int WeekOfCurrent(DateTime currentDate, bool jumpYear) { if (DateTime.MinValue == currentDate || DateTime.MaxValue == currentDate) return 0; int result, offset; var firstDate = WeekOfFirstDay(currentDate.Year, jumpYear, out offset); //年度周一的日期 var firstWeek = (int)firstDate.DayOfWeek; //该年的第一天是周几 var currentDay = currentDate.DayOfYear; if (offset > 0) { currentDay += offset; } else { currentDay -= offset; } var remainderDay = currentDay - (7 - firstWeek); if (remainderDay < 1) { result = 1; } else { result = remainderDay / 7; if (remainderDay % 7 != 0) result++; result++; } return result; }
5.统计一段时间内有多少个星期几:
////// 统计一段时间内有多少个星期几 /// /// 开始日期 /// 结束日期 /// 星期几 ///多少个星期几 public static int WeekOfTotalWeeks(DateTime beginDate, DateTime endDate, DayOfWeek weekNumber) { var dayTotal = new TimeSpan(endDate.Ticks - beginDate.Ticks); var result = (int)dayTotal.TotalDays / 7; var iLen = dayTotal.TotalDays % 7; for (var i = 0; i <= iLen; i++) { if (beginDate.AddDays(i).DayOfWeek != weekNumber) continue; result++; break; } return result; }
6.计算当前月属于第几季度:
////// 计算当前月属于第几季度 /// ///当前年第几季度 public static int QuarterOfCurrent() { return QuarterOfCurrent(DateTime.Now.Month); } ////// 计算某个月属于第几季度 /// /// 需要计算的月份 ///某年第几季度 public static int QuarterOfCurrent(int month) { if (month < 1 || month > 12) return -1; return (month - 1) / 3 + 1; }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻标题:C#计算时间间隔和时间所属区间的通用操作方法-创新互联
文章地址:http://azwzsj.com/article/hiegh.html