/// <summary> /// 得到一年中的某周的起始日和截止日 /// 年 nYear /// 周数 nNumWeek /// 周始 out dtWeekStart /// 周终 out dtWeekeEnd /// </summary> /// <param name="_"></param> /// <param name="nYear">年份</param> /// <param name="nNumWeek">第几周</param> /// <param name="dtWeekStart">开始日期</param> /// <param name="dtWeekeEnd">结束日期</param> public static void GetWeekTime(this DateTime _, int nYear, int nNumWeek, out DateTime dtWeekStart, out DateTime dtWeekeEnd) { DateTime dt = new DateTime(nYear, 1, 1); dt += new TimeSpan((nNumWeek - 1) * 7, 0, 0, 0); dtWeekStart = dt.AddDays(-(int)dt.DayOfWeek + (int)DayOfWeek.Monday); dtWeekeEnd = dt.AddDays((int)DayOfWeek.Saturday - (int)dt.DayOfWeek + 1); }
/// <summary> /// 指定したセクションの現在時刻に対する残り時間を取得します /// </summary> /// <param name="section">セクション(1=午前, 2=午後, 3=月末~月始)</param> /// <returns>セクション開始前は「待ち○○」、セクション中は「あと○○」、セクション終了後は「確定」※○○はh:mmとなります</returns> public static string GetTodaysLimitTimeString(int section) { DateTime now = DateTime.Now; DateTime start, limit; int nowsection = GetSection(now); if (now.Hour >= 0 && now.Hour < 2) { start = new DateTime(now.Year, now.Month, now.Day).AddDays(-1); limit = new DateTime(now.Year, now.Month, now.Day).AddDays(-1); } else { start = new DateTime(now.Year, now.Month, now.Day); limit = new DateTime(now.Year, now.Month, now.Day); } //これとは別にSection=3だった場合は1日進める if (nowsection == 3) { start = start.AddDays(1); limit = limit.AddDays(1); } switch (section) { case 1: start += new TimeSpan(2, 0, 0); limit += new TimeSpan(14, 0, 0); break; case 2: //最終日の場合 start += new TimeSpan(14, 0, 0); if (start.AddDays(1).Day == 1) { limit += new TimeSpan(22, 0, 0); } limit += new TimeSpan(26, 0, 0); break; case 3: start += new TimeSpan(22, 0, 0); limit += new TimeSpan(26, 0, 0); break; } //セクション終わってた場合 if (now >= limit) return "確定"; //始まってない場合 else if (nowsection != section) return "待ち" + (start - now).ToString(@"h\:mm"); //セクション中の場合 else return "あと" + (limit - now).ToString(@"h\:mm"); }