public static void Test() { Console.WriteLine("+++++++++++++++++PlanTimeTest+++++++++++++++++"); PlanTime time = new PlanTime(2013, 11, 12, 4, 26, 12); { Console.WriteLine("-----------------OneOff-------------------"); PlanTime time2 = PlanTime.Parse("2013-01-12 02:03:40"); Console.WriteLine("String:{0}", time2.ToString()); Console.WriteLine("ToDateTime:{0}", time2.ToDateTime()); Console.WriteLine("GetNextTime:{0}", time2.GetNextTime()); } { Console.WriteLine("-----------------Daily-------------------"); PlanTime time2 = PlanTime.Parse("03:16:05"); Console.WriteLine("String:{0}", time2.ToString()); Console.WriteLine("ToDateTime:{0}", time2.ToDateTime()); Console.WriteLine("GetNextTime:{0}", time2.GetNextTime()); } { Console.WriteLine("-----------------Weekly-------------------"); PlanTime time2 = PlanTime.Parse("23:58:05 Sunday"); Console.WriteLine("String:{0}", time2.ToString()); Console.WriteLine("ToDateTime:{0}", time2.ToDateTime()); Console.WriteLine("GetNextTime:{0}", time2.GetNextTime()); } }
/// <summary> /// 获取下次触发事件的时间间隔 /// </summary> /// <param name="needRepeat"></param> /// <returns>返回时间间隔</returns> private TimeSpan GetNextRaisePeriod(Boolean needRepeat) { TimeSpan ts = needRepeat ? RepeatInterval : (m_Time.GetNextTime() - DateTime.Now); //如果时间间隔过长则使用一个简短的时间来做校正 if (ts > TimeSpan.FromDays(10)) { return(TimeSpan.FromDays(1)); } else if (ts < TimeSpan.FromMilliseconds(100)) { return(TimeSpan.FromMilliseconds(100)); } else { return(ts); } }
/// <summary> /// 获取下次触发事件的时间间隔 /// </summary> /// <returns>返回时间间隔</returns> private TimeSpan GetNextRaisePeriod() { DateTime begin = m_BeginTime.ToDateTime(); DateTime beginNext = m_BeginTime.GetNextTime(); DateTime end = m_EndTime.ToDateTime(); DateTime endNext = m_EndTime.GetNextTime(); DateTime now = DateTime.Now; TimeSpan result; if (m_Begun == false) { //此次的时间段已过期,需要使用下次的时间段 if (now > end) { //Console.WriteLine("Begun false, now > end. {0} > {1}", now, end); result = beginNext - now; } //此次的时间段尚未抵达 else if (now < begin) { //Console.WriteLine("Begun false, now < begin. {0} < {1}", now, begin); result = begin - now; } //在时间段内 else { //Console.WriteLine("Begun false, in range. {0} in {1}/{2}", now, begin, end); result = TimeSpan.FromMilliseconds(100);//立即触发 } } else { //已结束 if (now >= end) { //Console.WriteLine("Begun true, now >= end. {0} >= {1}", now, end); result = TimeSpan.FromMilliseconds(100);//立即触发 } //尚未开始,但是标志位已不正确 else if (now < begin) { //开始重置标记为 //Console.WriteLine("PlanPeriod begun flag error, reset flag now."); m_Begun = false; result = begin - now; } //在时间段内 else { //Console.WriteLine("Begun true, in range. {0} in {1}/{2}", now, begin, end); result = end - now; } } //如果时间间隔过长则使用一个简短的时间来做校正 if (result > TimeSpan.FromDays(10)) { return(TimeSpan.FromDays(1)); } else if (result < TimeSpan.FromMilliseconds(100)) { return(TimeSpan.FromMilliseconds(100)); } else { return(result); } }