using System.Globalization; using System; namespace JiaZhiQuan.Common.Utils { public static class DateTimeUtils { /// /// 获取当前日期是第几周,周的起始日期和结束日期 /// /// /// (当前周是今年的第几周,周的开始日期,周的结束日期) public static (int, DateTime, DateTime) GetDateWeekRange(DateTime tmpDate) { var startDateStr = tmpDate.Date.AddDays(-(int)tmpDate.DayOfWeek);//当前周的开始日期 var endDateStr = tmpDate.Date.AddDays(6 - (int)tmpDate.DayOfWeek);//当前周的结束日期 GregorianCalendar gc = new GregorianCalendar(); // 完整周计算,周的开始是周日 int weekOfYear = gc.GetWeekOfYear(tmpDate, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday); return (weekOfYear, startDateStr, endDateStr); } /// /// 根据小时开始,返回小时范围 /// case:2020/01/01 23:00~2020/01/07 00:00 /// /// /// public static string GetHourRangeStr(DateTime start, string dateFormat) { return $"{start.ToString(dateFormat)}~{start.AddHours(1).ToString(dateFormat)}"; } /// /// 根据周开始天,返回周范围 /// case:2020/01/01~2020/01/07 /// /// /// public static string GetWeekRangeStr(string startWeekDate, string dateFormat) { return $"{startWeekDate}~{DateTime.Parse(startWeekDate).AddDays(6).ToString(dateFormat)}"; } /// /// 根据月开始天,返回月范围 /// case:2020/01~2020/02 /// /// /// public static string GetMonthRangeStr(string startMonthDate) { var start = DateTime.Parse(startMonthDate); return $"{start.ToString("yyyy/MM")}~{start.AddMonths(1).ToString("yyyy/MM")}"; } /// /// 计算两个时间相差几周 /// /// /// public static int TwoDateDiffWeeks(DateTime time1, DateTime time2) { var week1 = GetDateWeekRange(time1).Item2; var week2 = GetDateWeekRange(time2).Item2; return (int)Math.Floor((week2 - week1).TotalDays / 7.0); } /// /// 计算两个时间相差几月 /// /// /// public static int TwoDateDiffMonths(string time1, string time2) { var date1 = DateTime.Parse(time1); var date2 = DateTime.Parse(time2); return (date2.Year - date1.Year) * 12 + (date2.Month - date1.Month); } /// /// 获取今天是这周的第几天 /// /// public static int GetDayOfWeek() { DateTime today = DateTime.Now; // 根据国际周的计算方式调整 int dayOfWeek = ((int)today.DayOfWeek + 6) % 7 + 1; return dayOfWeek; } } }