Пример #1
0
 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));
     }
 }
Пример #2
0
 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));
     }
 }
Пример #3
0
        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);
        }
Пример #4
0
 private DateTime AddDateTime(DateTime dateTime, long count) => TimeFunctions.AddDateTime(TimeUnit, dateTime, count);
Пример #5
0
 private long TimeCountBetween(DateTime dateTime1, DateTime dateTime2) => TimeFunctions.TimeCountBetween(TimeUnit, dateTime1, dateTime2);
Пример #6
0
        /// <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);
        }
Пример #7
0
 /// <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));
 }
Пример #8
0
 public TimeRange(DateTime dateTimeStart, long durationCount, TimeUnit timeUnit)
 {
     DateTimeStart = TimeFunctions.TruncDateTime(TimeUnit, dateTimeStart);
     DurationCount = durationCount;
     this.TimeUnit = timeUnit;
 }