dayofrangetimingbase.cs

来自「基于LINQ和.NET 3.5 的数据库源码」· CS 代码 · 共 58 行

CS
58
字号
using System;

namespace Lephone.Util.TimingTask.Timings
{
	public abstract class DayOfRangeTimingBase : ITiming
	{
		protected TimeSpan TimeOfDay;
		protected int DayOfRange;
		protected NowProvider NowTimeProvider;
		protected DateTime LastCheckTime = DateTime.Now;

		public DayOfRangeTimingBase(TimeOfDayStructure TimeOfDay, int DayOfRange)
			: this(TimeOfDay, DayOfRange, NowProvider.Instance) {}

		public DayOfRangeTimingBase(TimeOfDayStructure TimeOfDay, int DayOfRange, NowProvider NowTimeProvider)
		{
			this.NowTimeProvider = NowTimeProvider;
			this.TimeOfDay = TimeOfDay.TimeSpanFromMidNight;
			this.DayOfRange = DayOfRange;
		}

		public bool TimesUp()
		{
			bool bRet = false;
			try
			{
				long ts = TimeSpanFromNowOn().Ticks;
				// using recode last check stat
				bRet = ( ts <= 0 && LastCheckTime < NowTimeProvider.Now.Date.Add(TimeOfDay) );
			}
			catch ( ArgumentException ) {}

			LastCheckTime = NowTimeProvider.Now;

			return bRet;
		}

		// return today TimeSpan only.
		public TimeSpan TimeSpanFromNowOn()
		{
			DateTime itsDate = NowTimeProvider.Now.Date;
			if ( IsDayOfRange() )
			{
				DateTime dt = itsDate.Add(TimeOfDay);
				TimeSpan ts = dt.Subtract(NowTimeProvider.Now);
				return ts;
			}
			// return new TimeSpan(1, 0, 0, 0);
			throw new ArgumentException("Not today");
		}

		public void Reset() {}

		protected abstract bool IsDayOfRange();

	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?