/// <summary> /// 根据日期获取当前季度第一天的DateTime /// </summary> public static DateTime GetCurQuarterBegin(this DateTime source) { List <int> quarterBeginMonth = new List <int> { 1, 4, 7, 10 }; if (quarterBeginMonth.Contains(source.Month)) { return(GetCurMonthFirst(source)); } else { int month = quarterBeginMonth[source.GetQuarter() - 1]; return(new DateTime(source.Year, month, 1)); } }
/// <summary> /// 获取指定日期的季度第1天日期 /// </summary> /// <param name="dateTime">日期时间</param> /// <returns>日期的季度第1天日期</returns> public static DateTime QuarterFirstDay(this DateTime dateTime) { switch (dateTime.GetQuarter()) { case 0: return(new DateTime(dateTime.Year, 1, 1)); case 1: return(new DateTime(dateTime.Year, 4, 1)); case 2: return(new DateTime(dateTime.Year, 7, 1)); default: return(new DateTime(dateTime.Year, 10, 1)); } }
/// <summary> /// 获取指定日期的季度最后1天日期 /// </summary> /// <param name="dateTime">日期时间</param> /// <returns>日期的季度最后1天日期</returns> public static DateTime QuarterLastDay(this DateTime dateTime) { switch (dateTime.GetQuarter()) { case 0: return(new DateTime(dateTime.Year, 3, 31, 23, 59, 59, 999)); case 1: return(new DateTime(dateTime.Year, 6, 30, 23, 59, 59, 999)); case 2: return(new DateTime(dateTime.Year, 9, 30, 23, 59, 59, 999)); default: return(new DateTime(dateTime.Year, 12, 31, 23, 59, 59, 999)); } }
static void Main(string[] args) { var date = new DateTime(2015, 10, 5); var curQ = 0; for (Int32 i = 1; i <= 52; i++) { var newQ = date.GetQuarter(); if(curQ != newQ) { curQ = newQ; Console.WriteLine($"I\\{date.Year}.{curQ:D2}|{date.GetQuarterStart().ToShortDateString()}|{date.GetQuarterEnd().ToShortDateString()}"); } Console.WriteLine($"I\\{date.Year}.{curQ:D2}\\{date.Year}.{curQ:D2}-{date.GetWeekNum():D2}|{date.ToShortDateString()}|{date.AddDays(6).ToShortDateString()}"); date = date.AddDays(7); } }
/// <summary> /// Extension method used to compare two dates and their respective quarters. /// </summary> /// <param name="initialDate">The DateTime variable that will utilize the /// extension method.</param> /// <param name="dateToCompare">The DateTime value to compare against.</param> /// <returns>True if both dates are within the same quarter; false if they are not.</returns> public static bool CompareQuarter(this DateTime initialDate, DateTime dateToCompare) { return initialDate.GetQuarter() == dateToCompare.GetQuarter(); }