public ModelTime(int ticks, ModelTimeStep step, DateTimeOffset begin) { if (step == ModelTimeStep.Undefined) { throw new ArgumentException("Model time step couldn't be Undefined. (This exception can be triggered by using 0 as ModelTimeStep)"); } Begin = begin; Ticks = ticks; }
public void TimeSpansFromDateOperateCorrect(ModelTimeStep modelStep, ModelTimeStep spanStep, int res) { var now = DateTimeOffset.Parse("2019-01-01"); var scheduler = new ModelTimeScheduler(modelStep, now); var transform = scheduler.GetType().GetMethod("FromModelTimeUnits", BindingFlags.NonPublic | BindingFlags.Instance); var multiplier = ModelTimeScheduler.GetTimeSpanMultiplier(modelStep, spanStep); Assert.Equal(multiplier, res); }
public static DateTimeOffset AsOffset(this ModelTime time, ModelTimeStep step) { Func <int, TimeSpan> span; switch (step) { case ModelTimeStep.Millisecond: span = (t) => TimeSpan.FromMilliseconds(t); break; case ModelTimeStep.Second: span = (t) => TimeSpan.FromSeconds(t); break; case ModelTimeStep.Minute: span = (t) => TimeSpan.FromMinutes(t); break; case ModelTimeStep.Hour: span = (t) => TimeSpan.FromHours(t); break; case ModelTimeStep.Day: span = (t) => TimeSpan.FromDays(t); break; case ModelTimeStep.Month: span = (t) => TimeSpan.FromDays(t * 30); break; case ModelTimeStep.Year: span = (t) => TimeSpan.FromDays(360 * t); break; default: throw new ArgumentOutOfRangeException(); } return(time.Begin + span(time.Ticks)); }
public static int GetTimeSpanMultiplier(ModelTimeStep modelTimeStep, ModelTimeStep spanStep) { if (modelTimeStep == spanStep || spanStep == ModelTimeStep.Undefined) { return(1); } if ((int)spanStep < (int)modelTimeStep) { throw new ArgumentException("Can't time afterSpan that smaller than model time"); } var degrade = new Func <ModelTimeStep, ModelTimeStep>(a => (ModelTimeStep)((int)a - 1)); switch (spanStep) { case ModelTimeStep.Millisecond: return(1000 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep))); case ModelTimeStep.Second: return(60 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep))); case ModelTimeStep.Minute: return(60 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep))); case ModelTimeStep.Hour: return(60 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep))); case ModelTimeStep.Day: return(24 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep))); case ModelTimeStep.Month: return(30 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep))); case ModelTimeStep.Year: return(12 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep))); default: throw new ArgumentOutOfRangeException(nameof(modelTimeStep), modelTimeStep, null); } }
public EventLoop(ModelTimeStep step, DateTimeOffset beginning, IObservable <IRxModellingEvent> broker) : this(new ModelTimeScheduler(step, beginning), broker) { }
public ModelTimeScheduler(ModelTimeStep step, DateTimeOffset beginning) { CurrentTime = new ModelTime(0, step, beginning); TimeStep = step; }