public DateTime RealEndOfTimeRange(TimeUnit timeUnit, TimeType timetype) { if (timetype == TimeType.Moment) //Ha időpontot vizsgálok, akkor a záró időpontot kiterjesztem a megadott időpontot tartalmazó időszak végéig. { return(TimeFunctions.AddDateTime(timeUnit, EndOfTimeRange(timeUnit), -1).AddTicks(1)); } else //Ha időszakot vizsgálok, akkor a kapott endtime paraméterben levő időpontot még intervallumon belülinek veszem, ezért a záró időpontot kiterjesztem 1 legkisebb időegységgel. { return(EndOfTimeRange(timeUnit).AddTicks(-1)); } }
public string TimeRangesToString(bool showEndTimes = false, TimeType timeType = TimeType.Interval) { ReloadData(); if (TimeUnit == TimeUnit.Infinity) { return(TimeRanges.Any().ToString()); } else { return(TimeFunctions.TimeRangesToString(TimeRanges, TimeUnit, timeType, showEndTimes)); } }
public static TimeRange CalcTimeRange(DateTime dateTime1, DateTime dateTime2, TimeType timeType, TimeUnit timeUnit) { if (dateTime1 > dateTime2) { return(CalcTimeRange(dateTime2, dateTime1, timeType, timeUnit)); } if (timeType == TimeType.Moment) { dateTime1 = TimeFunctions.RoundUpDateTime(timeUnit, dateTime1); dateTime2 = TimeFunctions.AddDateTime(timeUnit, TimeFunctions.TruncDateTime(timeUnit, dateTime2), 1); } else { dateTime1 = TimeFunctions.TruncDateTime(timeUnit, dateTime1); dateTime2 = dateTime2.AddTicks(-1); } long durationCount = TimeFunctions.TimeCountBetween(timeUnit, dateTime1, dateTime2); TimeRange timeRange = new TimeRange(dateTime1, durationCount, timeUnit); return(timeRange); }
private DateTime AddDateTime(DateTime dateTime, long count) => TimeFunctions.AddDateTime(TimeUnit, dateTime, count);
private long TimeCountBetween(DateTime dateTime1, DateTime dateTime2) => TimeFunctions.TimeCountBetween(TimeUnit, dateTime1, dateTime2);
/// <summary> /// Invertálja a Timeranges-t. Olyan időintervallumokat tartalmazó TimeControl -t ad vissza, ami a beadott dátumok közötti összes meg nem jelölt időszakot tartalmazza. /// </summary> public TaskControl GetInverseTimeControl(TimeRange timeRange) { var res = new TaskControl(TimeUnit); ReloadData(); if (TimeUnit == TimeUnit.Infinity) { if (TimeRanges.Any()) { res.RemoveTimeRange(TimeRange.Infinity()); } else { res.AddTimeRange(TimeRange.Infinity()); } } else { //Ez az az időpont, amelyik már éppen NINCS benne a vizsgált időszakban DateTime realStartTime = TimeFunctions.TruncDateTime(TimeUnit, timeRange.DateTimeStart); DateTime realEndTime = timeRange.EndOfTimeRange(TimeUnit); /*if (TimeType == TimeType.Moment)//Ha időpontot vizsgálok, akkor a záró időpontot kiterjesztem a megadott időpontot tartalmazó időszak végéig. * realEndTime = AddDateTime(realEndTime, 1); * else//Ha időszakot vizsgálok, akkor a kapott endtime paraméterben levő időpontot még intervallumon belülinek veszem, ezért a záró időpontot kiterjesztem 1 legkisebb időegységgel. * realEndTime = realEndTime/*.AddTicks(1)*/ ; //realEndTime = var trInInterval = TimeRanges.Where(x => x.EndOfTimeRange(TimeUnit) > realStartTime && x.DateTimeStart < realEndTime).OrderBy(x => x.DateTimeStart); //első időszak előtti rész var first = trInInterval.FirstOrDefault(); if (first != null && first.DateTimeStart > realStartTime) { var tr = newTaskControl_TimeRange(realStartTime, TimeCountBetween(realStartTime, first.DateTimeStart)); res.TimeRanges.Add(tr); } TaskControl_TimeRange?prevTimeRange = null; //hozzáadom az egyes időintervallumok között kihagyott időszakokat foreach (var actTimeRange in trInInterval) { if (prevTimeRange != null) { var starttime = prevTimeRange.EndOfTimeRange(TimeUnit); var tr = newTaskControl_TimeRange(starttime, TimeCountBetween(starttime, actTimeRange.DateTimeStart)); if (tr.DurationCount > 0) { res.TimeRanges.Add(tr); } } prevTimeRange = actTimeRange; } //hozzáadom az utolsó utáni-t var last = trInInterval.LastOrDefault(); if (last != null && AddDateTime(last.DateTimeStart, last.DurationCount) < realEndTime) { var starttime = last.EndOfTimeRange(TimeUnit); var tr = newTaskControl_TimeRange(starttime, TimeCountBetween(starttime, realEndTime)); if (tr.DurationCount > 0) { res.TimeRanges.Add(tr); } } if (!trInInterval.Any()) { var tr = newTaskControl_TimeRange(realStartTime, TimeCountBetween(realStartTime, realEndTime)); res.TimeRanges.Add(tr); } } return(res); }
/// <summary> /// Az időintervallum végét adja vissza felfelé kerekítve a következő időszakasz kezdetére. /// </summary> public DateTime EndOfTimeRange(TimeUnit timeUnit) { return(TimeFunctions.AddDateTime(timeUnit, this.DateTimeStart, this.DurationCount)); }
public TimeRange(DateTime dateTimeStart, long durationCount, TimeUnit timeUnit) { DateTimeStart = TimeFunctions.TruncDateTime(TimeUnit, dateTimeStart); DurationCount = durationCount; this.TimeUnit = timeUnit; }