/// <summary>以指定的比较类型比较指定日期早于、等于或晚于当前指定的日期</summary> /// <param name="t1">当前指定的日期</param> /// <param name="t2">要比较的日期</param> /// <param name="compareType">比较类型</param> /// <returns>以 -1、0、1 表示的早于、等于或晚于当前指定的日期</returns> public static int CompareTo_(this DateTime t1, DateTime t2, DateTimeCompareType compareType = DateTimeCompareType.None) { if(compareType == DateTimeCompareType.None) return t1.CompareTo(t2); DateTime d1, d2; int y1 = t1.Year, y2 = t2.Year; switch(compareType) { case DateTimeCompareType.ByYear: d1 = new DateTime(y1, 1, 1); d2 = new DateTime(y2, 1, 1); break; case DateTimeCompareType.ByHalfYear: d1 = new DateTime(y1, t1.GetHalfYear_(), 1); d2 = new DateTime(y2, t2.GetHalfYear_(), 1); break; case DateTimeCompareType.ByQuarter: d1 = new DateTime(y1, t1.GetQuarter_(), 1); d2 = new DateTime(y2, t2.GetQuarter_(), 1); break; case DateTimeCompareType.ByMonth: d1 = new DateTime(y1, t1.Month, 1); d2 = new DateTime(y2, t2.Month, 1); break; case DateTimeCompareType.ByWeek: if(y1 != y2) return y1.CompareTo(y2); return t1.GetWeekOfYear_().CompareTo(t2.GetWeekOfYear_()); case DateTimeCompareType.ByDay: return t1.Date.CompareTo(t2.Date); case DateTimeCompareType.ByHour: d1 = new DateTime(y1, t1.Month, t1.Day, t1.Hour, 0, 0); d2 = new DateTime(y2, t2.Month, t2.Day, t2.Hour, 0, 0); break; case DateTimeCompareType.ByMinute: d1 = new DateTime(y1, t1.Month, t1.Day, t1.Hour, t1.Minute, 0); d2 = new DateTime(y2, t2.Month, t2.Day, t2.Hour, t2.Minute, 0); break; default: d1 = new DateTime(y1, t1.Month, t1.Day, t1.Hour, t1.Minute, t1.Second); d2 = new DateTime(y2, t2.Month, t2.Day, t2.Hour, t2.Minute, t2.Second); break; } return d1.CompareTo(d2); }
/// <summary>获取指定年份中总共有几周</summary> /// <param name="year">年份</param> /// <returns>表示当年的总周数</returns> public static int GetWeeksInYear_(int year) { DateTime dt = new DateTime(year, 12, 31); return dt.GetWeekOfYear_(); }