Exemple #1
0
        /// <summary>
        /// Returns a timestampseries at the required timestep
        /// Returns a new empty timestampseries if no data exists.
        /// </summary>
        /// <param name="TimeStep"></param>
        /// <returns></returns>
        public FixedTimeStepSeries GetTs(TimeStepUnit TimeStep)
        {
            FixedTimeStepSeries toreturn;

            if (!data.TryGetValue(TimeStep, out toreturn))
            {
                if (data.Count == 0)
                {
                    toreturn = new FixedTimeStepSeries()
                    {
                        TimeStepSize = TimeStep, Name = Name + "_" + TimeStep.ToString()
                    };
                }

                if (data.ContainsKey(TimeStepUnit.Day))
                {
                    toreturn = TSTools.ChangeZoomLevel(data[TimeStepUnit.Day], TimeStep, Accumulate);
                }
                else if (data.ContainsKey(TimeStepUnit.Month))
                {
                    toreturn = TSTools.ChangeZoomLevel(data[TimeStepUnit.Month], TimeStep, Accumulate);
                }
                data.Add(TimeStep, toreturn);
            }
            return(toreturn);
        }
Exemple #2
0
        public static DateTime GetNextTime(DateTime Start, TimeStepUnit timespan)
        {
            switch (timespan)
            {
            case TimeStepUnit.Year:
                return(Start.AddYears(1));

            case TimeStepUnit.Month:
                return(Start.AddMonths(1));

            case TimeStepUnit.Day:
                return(Start.AddDays(1));

            case TimeStepUnit.Hour:
                return(Start.AddHours(1));

            case TimeStepUnit.Minute:
                return(Start.AddMinutes(1));

            case TimeStepUnit.Second:
                return(Start.AddSeconds(1));

            default:
                throw new Exception("TimeStepUnit not set");
            }
        }
    /// <summary>
    /// Returns a timestampseries at the required timestep
    /// Returns a new empty timestampseries if no data exists.
    /// </summary>
    /// <param name="TimeStep"></param>
    /// <returns></returns>
    public FixedTimeStepSeries GetTs(TimeStepUnit TimeStep)
    {
      FixedTimeStepSeries toreturn;
      if (!data.TryGetValue(TimeStep, out toreturn))
      {
        if (data.Count == 0)
        {
          toreturn = new FixedTimeStepSeries() { TimeStepSize = TimeStep, Name = Name + "_" + TimeStep.ToString() };
        }

        if (data.ContainsKey(TimeStepUnit.Day))
          toreturn = TSTools.ChangeZoomLevel(data[TimeStepUnit.Day], TimeStep, Accumulate);
        else if (data.ContainsKey(TimeStepUnit.Month))
          toreturn = TSTools.ChangeZoomLevel(data[TimeStepUnit.Month], TimeStep, Accumulate);
        data.Add(TimeStep, toreturn);
      }
      return toreturn;
    }
 public static DateTime SubstractTimeStepUnit(this DateTime dt, TimeStepUnit tstep)
 {
   switch (tstep)
   {
     case TimeStepUnit.Year:
       return dt.AddYears(-1);
     case TimeStepUnit.Month:
       return dt.AddMonths(-1);
     case TimeStepUnit.Day:
       return dt.AddDays(-1);
     case TimeStepUnit.Hour:
       return dt.AddHours(-1);
     case TimeStepUnit.Minute:
       return dt.AddMinutes(-1);
     case TimeStepUnit.Second:
       return dt.AddSeconds(-1);
   }
   return dt;
 }
Exemple #5
0
        public static DateTime GetTimeOfFirstTimeStep(DateTime Start, TimeStepUnit tsu)
        {
            switch (tsu)
            {
            case TimeStepUnit.Year:
                return(new DateTime(Start.Year, 1, 1));

            case TimeStepUnit.Month:
                return(new DateTime(Start.Year, Start.Month, 1));

            case TimeStepUnit.Day:
                return(new DateTime(Start.Year, Start.Month, Start.Day));

            case TimeStepUnit.Hour:
                return(new DateTime(Start.Year, Start.Month, Start.Day, Start.Hour, 0, 0));

            case TimeStepUnit.Minute:
                return(new DateTime(Start.Year, Start.Month, Start.Day, Start.Hour, Start.Minute, 0));

            case TimeStepUnit.Second:
                return(new DateTime(Start.Year, Start.Month, Start.Day, Start.Hour, Start.Minute, Start.Second));
            }
            return(Start);
        }
Exemple #6
0
        public static DateTime SubstractTimeStepUnit(this DateTime dt, TimeStepUnit tstep)
        {
            switch (tstep)
            {
            case TimeStepUnit.Year:
                return(dt.AddYears(-1));

            case TimeStepUnit.Month:
                return(dt.AddMonths(-1));

            case TimeStepUnit.Day:
                return(dt.AddDays(-1));

            case TimeStepUnit.Hour:
                return(dt.AddHours(-1));

            case TimeStepUnit.Minute:
                return(dt.AddMinutes(-1));

            case TimeStepUnit.Second:
                return(dt.AddSeconds(-1));
            }
            return(dt);
        }
Exemple #7
0
        public static TimeStampSeries ChangeZoomLevel(TimeStampSeries Data, TimeStepUnit NewZoomLevel, bool Accumulate)
        {
            TimeStampSeries ToReturn = new TimeStampSeries();

            ToReturn.DeleteValue  = Data.DeleteValue;
            ToReturn.Name         = Data.Name;
            ToReturn.ID           = Data.ID;
            ToReturn.TimeStepSize = NewZoomLevel;


            DateTime start      = Data.StartTime;
            DateTime end        = Data.EndTime;
            int      localcount = 0;

            switch (NewZoomLevel)
            {
            case TimeStepUnit.Year:
            {
                int currentyear = start.Year;
                ToReturn.Items.Add(new TimeStampValue(new DateTime(start.Year, 1, 1), 0));
                foreach (var v in Data.Items.Where(dv => dv.Value != Data.DeleteValue))
                {
                    if (v.Time.Year == currentyear)
                    {
                        ToReturn.Items.Last().Value += v.Value;
                    }
                    else
                    {
                        currentyear = v.Time.Year;
                        if (!Accumulate)
                        {
                            ToReturn.Items.Last().Value /= localcount;
                        }
                        localcount = 0;
                        ToReturn.Items.Add(new TimeStampValue(new DateTime(v.Time.Year, 1, 1), v.Value));
                    }
                    localcount++;
                }
                if (!Accumulate)
                {
                    ToReturn.Items.Last().Value /= localcount;
                }
            }
            break;

            case TimeStepUnit.Month:
                int currentmonth = start.Month;
                ToReturn.Items.Add(new TimeStampValue(new DateTime(start.Year, start.Month, 1), 0));
                foreach (var v in Data.Items.Where(dv => dv.Value != Data.DeleteValue))
                {
                    if (v.Time.Month == currentmonth)
                    {
                        ToReturn.Items.Last().Value += v.Value;
                    }
                    else
                    {
                        currentmonth = v.Time.Month;
                        if (!Accumulate)
                        {
                            ToReturn.Items.Last().Value /= localcount;
                        }
                        localcount = 0;
                        ToReturn.Items.Add(new TimeStampValue(new DateTime(v.Time.Year, v.Time.Month, 1), v.Value));
                    }
                    localcount++;
                }
                if (!Accumulate)
                {
                    ToReturn.Items.Last().Value /= localcount;
                }

                break;

            case TimeStepUnit.Day:
                break;

            case TimeStepUnit.Hour:
                break;

            case TimeStepUnit.Minute:
                break;

            case TimeStepUnit.Second:
                break;

            case TimeStepUnit.None:
                break;

            default:
                break;
            }


            return(ToReturn);
        }
Exemple #8
0
        /// <summary>
        /// Gets a fixedtimestepseries at another zoom level.
        /// </summary>
        /// <param name="Data"></param>
        /// <param name="NewZoomLevel"></param>
        /// <param name="Accumulate"></param>
        /// <returns></returns>
        public static FixedTimeStepSeries ChangeZoomLevel(FixedTimeStepSeries Data, TimeStepUnit NewZoomLevel, bool Accumulate)
        {
            if (Data.TimeStepSize <= NewZoomLevel)
            {
                return(null);
            }

            FixedTimeStepSeries ToReturn = new FixedTimeStepSeries();

            ToReturn.DeleteValue     = Data.DeleteValue;
            ToReturn.TimeStepSize    = NewZoomLevel;
            ToReturn.StartTime       = GetTimeOfFirstTimeStep(Data.StartTime, NewZoomLevel);
            ToReturn.OffSetStartTime = Data.OffSetStartTime;
            ToReturn.OffSetEndTime   = Data.OffSetEndTime;


            List <double> newvalues = new List <double>();

            int localcount = 0;
            int counter    = 0;

            switch (NewZoomLevel)
            {
            case TimeStepUnit.Year:
            {
                int currentyear = -1;
                foreach (var v in Data.Items)
                {
                    if (Data.GetTime(counter).Year == currentyear)
                    {
                        if (v.Value != Data.DeleteValue)
                        {
                            newvalues[newvalues.Count - 1] += v.Value;
                        }
                    }
                    else
                    {
                        currentyear = Data.GetTime(counter).Year;
                        if (!Accumulate & newvalues.Count > 0)
                        {
                            newvalues[newvalues.Count - 1] /= localcount;
                        }
                        localcount = 0;
                        newvalues.Add(v.Value);
                    }
                    localcount++;
                    counter++;
                }
                if (localcount != 12) //only use complete years
                {
                    newvalues.RemoveAt(newvalues.Count - 1);
                }
                else
                {
                    if (!Accumulate)
                    {
                        newvalues[newvalues.Count - 1] /= localcount;
                    }
                }
            }
            break;

            case TimeStepUnit.Month:
                int currentmonth = Data.StartTime.Month;
                newvalues.Add(0);
                foreach (var v in Data.Items)
                {
                    if (Data.GetTime(counter).Month == currentmonth)
                    {
                        if (v.Value != Data.DeleteValue)
                        {
                            newvalues[newvalues.Count - 1] += v.Value;
                        }
                    }
                    else
                    {
                        currentmonth = Data.GetTime(counter).Month;
                        if (!Accumulate)
                        {
                            newvalues[newvalues.Count - 1] /= localcount;
                        }
                        localcount = 0;
                        newvalues.Add(v.Value);
                    }
                    localcount++;
                    counter++;
                }
                if (!Accumulate)
                {
                    newvalues[newvalues.Count - 1] /= localcount;
                }

                break;

            case TimeStepUnit.Day:
                int currentday = Data.StartTime.Day;
                newvalues.Add(0);
                foreach (var v in Data.Items)
                {
                    if (Data.GetTime(counter).Day == currentday)
                    {
                        if (v.Value != Data.DeleteValue)
                        {
                            newvalues[newvalues.Count - 1] += v.Value;
                        }
                    }
                    else
                    {
                        currentday = Data.GetTime(counter).Day;
                        if (!Accumulate)
                        {
                            newvalues[newvalues.Count - 1] /= localcount;
                        }
                        localcount = 0;
                        newvalues.Add(v.Value);
                    }
                    localcount++;
                    counter++;
                }
                if (!Accumulate)
                {
                    newvalues[newvalues.Count - 1] /= localcount;
                }
                break;

            case TimeStepUnit.Hour:
                int currenthour = Data.StartTime.Hour;
                newvalues.Add(0);
                foreach (var v in Data.Items)
                {
                    if (Data.GetTime(counter).Hour == currenthour)
                    {
                        if (v.Value != Data.DeleteValue)
                        {
                            newvalues[newvalues.Count - 1] += v.Value;
                        }
                    }
                    else
                    {
                        currenthour = Data.GetTime(counter).Hour;
                        if (!Accumulate)
                        {
                            newvalues[newvalues.Count - 1] /= localcount;
                        }
                        localcount = 0;
                        newvalues.Add(v.Value);
                    }
                    localcount++;
                    counter++;
                }
                if (!Accumulate)
                {
                    newvalues[newvalues.Count - 1] /= localcount;
                }
                break;

            case TimeStepUnit.Minute:
                int currentminute = Data.StartTime.Minute;
                newvalues.Add(0);
                foreach (var v in Data.Items.Where(vv => vv.Value != Data.DeleteValue))
                {
                    if (Data.GetTime(counter).Minute == currentminute)
                    {
                        newvalues[newvalues.Count - 1] += v.Value;
                    }
                    else
                    {
                        currentminute = Data.GetTime(counter).Minute;
                        if (!Accumulate)
                        {
                            newvalues[newvalues.Count - 1] /= localcount;
                        }
                        localcount = 0;
                        newvalues.Add(v.Value);
                    }
                    localcount++;
                    counter++;
                }
                if (!Accumulate)
                {
                    newvalues[newvalues.Count - 1] /= localcount;
                }
                break;

            case TimeStepUnit.Second:
                break;

            case TimeStepUnit.None:
                break;

            default:
                break;
            }
            ToReturn.AddRange(newvalues.Select(n => new ValueDouble(n)));

            return(ToReturn);
        }
Exemple #9
0
        /// <summary>
        /// Changes the zoomlevel of a timespanseries
        /// </summary>
        /// <param name="Data"></param>
        /// <param name="NewZoomLevel"></param>
        /// <param name="Accumulate"></param>
        /// <returns></returns>
        public static IEnumerable <TimeSpanValue> ChangeZoomLevel(TimeSpanSeries Data, TimeStepUnit NewZoomLevel, bool Accumulate)
        {
            if (Data.TimeStepSize <= NewZoomLevel)
            {
                return(null);
            }

            List <TimeSpanValue> ToReturn = new List <TimeSpanValue>();

            DateTime start = Data.StartTime;
            DateTime end   = Data.EndTime;

            TimeSpanValue CurrentValue = new TimeSpanValue(GetTimeOfFirstTimeStep(start, NewZoomLevel), GetTimeOfFirstTimeStep(start, NewZoomLevel).AddTimeStepUnit(NewZoomLevel), 0);
            double        currentcount = 0;

            foreach (var v in Data.Items.Where(dv => dv.Value != Data.DeleteValue))
            {
                if (CurrentValue.StartTime <= v.StartTime & v.StartTime <= CurrentValue.EndTime)
                {
                    if (CurrentValue.EndTime >= v.EndTime) //We are still within the timespan
                    {
                        CurrentValue.Value += v.Value;
                        currentcount++;
                    }
                    else //We exceed the timespan
                    {
                        double outsidefraction = (v.EndTime.Subtract(CurrentValue.EndTime).TotalDays / v.EndTime.Subtract(v.StartTime).TotalDays);
                        CurrentValue.Value += v.Value * (1 - outsidefraction);
                        currentcount       += 1 - outsidefraction;

                        if (!Accumulate & currentcount != 0)
                        {
                            CurrentValue.Value /= currentcount;
                        }
                        ToReturn.Add(CurrentValue);
                        CurrentValue = new TimeSpanValue(CurrentValue.EndTime, CurrentValue.EndTime.AddTimeStepUnit(NewZoomLevel), v.Value * outsidefraction);
                        currentcount = outsidefraction;
                    }
                }
                else
                {
                    if (!Accumulate & currentcount != 0)
                    {
                        CurrentValue.Value /= currentcount;
                    }
                    ToReturn.Add(CurrentValue);
                    CurrentValue = new TimeSpanValue(GetTimeOfFirstTimeStep(v.StartTime, NewZoomLevel), GetTimeOfFirstTimeStep(v.StartTime, NewZoomLevel).AddTimeStepUnit(NewZoomLevel), v.Value);
                    currentcount = 1;
                }
            }
            if (!Accumulate & currentcount != 0)
            {
                CurrentValue.Value /= currentcount;
            }
            ToReturn.Add(CurrentValue);

            return(ToReturn);
        }
Exemple #10
0
    public static TimeStampSeries ChangeZoomLevel(TimeStampSeries Data, TimeStepUnit NewZoomLevel, bool Accumulate)
    {
      TimeStampSeries ToReturn = new TimeStampSeries();
      ToReturn.DeleteValue = Data.DeleteValue;
      ToReturn.Name = Data.Name;
      ToReturn.ID = Data.ID;
      ToReturn.TimeStepSize = NewZoomLevel;


      DateTime start = Data.StartTime;
      DateTime end = Data.EndTime;
      int localcount = 0;
      switch (NewZoomLevel)
      {
        case TimeStepUnit.Year:
          {
            int currentyear = start.Year;
            ToReturn.Items.Add(new TimeStampValue(new DateTime(start.Year, 1, 1), 0));
            foreach (var v in Data.Items.Where(dv => dv.Value != Data.DeleteValue))
            {
              if (v.Time.Year == currentyear)
                ToReturn.Items.Last().Value += v.Value;
              else
              {
                currentyear = v.Time.Year;
                if (!Accumulate)
                  ToReturn.Items.Last().Value /= localcount;
                localcount = 0;
                ToReturn.Items.Add(new TimeStampValue(new DateTime(v.Time.Year, 1, 1), v.Value));
              }
              localcount++;
            }
            if (!Accumulate)
              ToReturn.Items.Last().Value /= localcount;
          }
          break;
        case TimeStepUnit.Month:
          int currentmonth = start.Month;
          ToReturn.Items.Add(new TimeStampValue(new DateTime(start.Year, start.Month, 1), 0));
          foreach (var v in Data.Items.Where(dv => dv.Value != Data.DeleteValue))
          {
            if (v.Time.Month == currentmonth)
              ToReturn.Items.Last().Value += v.Value;
            else
            {
              currentmonth = v.Time.Month;
              if (!Accumulate)
                ToReturn.Items.Last().Value /= localcount;
              localcount = 0;
              ToReturn.Items.Add(new TimeStampValue(new DateTime(v.Time.Year, v.Time.Month, 1), v.Value));
            }
            localcount++;
          }
          if (!Accumulate)
            ToReturn.Items.Last().Value /= localcount;

          break;
        case TimeStepUnit.Day:
          break;
        case TimeStepUnit.Hour:
          break;
        case TimeStepUnit.Minute:
          break;
        case TimeStepUnit.Second:
          break;
        case TimeStepUnit.None:
          break;
        default:
          break;
      }


      return ToReturn;
    }
Exemple #11
0
 public static DateTime GetTimeOfFirstTimeStep(DateTime Start, TimeStepUnit tsu)
 {
   switch (tsu)
   {
     case TimeStepUnit.Year:
       return new DateTime(Start.Year, 1, 1);
     case TimeStepUnit.Month:
       return new DateTime(Start.Year, Start.Month, 1);
     case TimeStepUnit.Day:
       return new DateTime(Start.Year, Start.Month, Start.Day);
     case TimeStepUnit.Hour:
       return new DateTime(Start.Year, Start.Month, Start.Day, Start.Hour, 0, 0);
     case TimeStepUnit.Minute:
       return new DateTime(Start.Year, Start.Month, Start.Day, Start.Hour, Start.Minute, 0);
     case TimeStepUnit.Second:
       return new DateTime(Start.Year, Start.Month, Start.Day, Start.Hour, Start.Minute, Start.Second);
   }
   return Start;
 }
Exemple #12
0
    /// <summary>
    /// Gets a fixedtimestepseries at another zoom level.
    /// </summary>
    /// <param name="Data"></param>
    /// <param name="NewZoomLevel"></param>
    /// <param name="Accumulate"></param>
    /// <returns></returns>
    public static FixedTimeStepSeries ChangeZoomLevel(FixedTimeStepSeries Data, TimeStepUnit NewZoomLevel, bool Accumulate)
    {

      if (Data.TimeStepSize <= NewZoomLevel)
        return null;

      FixedTimeStepSeries ToReturn = new FixedTimeStepSeries();
      ToReturn.DeleteValue = Data.DeleteValue;
      ToReturn.TimeStepSize = NewZoomLevel;
      ToReturn.StartTime= GetTimeOfFirstTimeStep(Data.StartTime, NewZoomLevel);
      ToReturn.OffSetStartTime = Data.OffSetStartTime;
      ToReturn.OffSetEndTime = Data.OffSetEndTime;


      List<double> newvalues = new List<double>();

      int localcount = 0;
      int counter = 0;
      switch (NewZoomLevel)
      {
        case TimeStepUnit.Year:
          {
            int currentyear = -1;
            foreach (var v in Data.Items)
            {
              if (Data.GetTime(counter).Year == currentyear)
              {
                if (v.Value != Data.DeleteValue)
                  newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currentyear = Data.GetTime(counter).Year;
                if (!Accumulate & newvalues.Count>0)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
            if (localcount != 12) //only use complete years
              newvalues.RemoveAt(newvalues.Count - 1);
            else
            {
              if (!Accumulate)
                newvalues[newvalues.Count - 1] /= localcount;
            }
          }
          break;
        case TimeStepUnit.Month:
          int currentmonth = Data.StartTime.Month;
            newvalues.Add(0);
            foreach (var v in Data.Items)
            {
              if (Data.GetTime(counter).Month == currentmonth)
              {
                if (v.Value != Data.DeleteValue)
                  newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currentmonth = Data.GetTime(counter).Month;
                if (!Accumulate)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
          if (!Accumulate)
            newvalues[newvalues.Count - 1] /= localcount;

          break;
        case TimeStepUnit.Day:
          int currentday = Data.StartTime.Day;
            newvalues.Add(0);
            foreach (var v in Data.Items)
            {
              if (Data.GetTime(counter).Day == currentday)
              {
                if (v.Value != Data.DeleteValue)
                  newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currentday = Data.GetTime(counter).Day;
                if (!Accumulate)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
          if (!Accumulate)
            newvalues[newvalues.Count - 1] /= localcount;
          break;
        case TimeStepUnit.Hour:
          int currenthour = Data.StartTime.Hour;
            newvalues.Add(0);
            foreach (var v in Data.Items)
            {
              if (Data.GetTime(counter).Hour == currenthour)
              {
                if (v.Value != Data.DeleteValue)
                  newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currenthour = Data.GetTime(counter).Hour;
                if (!Accumulate)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
          if (!Accumulate)
            newvalues[newvalues.Count - 1] /= localcount;
          break;
        case TimeStepUnit.Minute:
          int currentminute = Data.StartTime.Minute;
            newvalues.Add(0);
            foreach (var v in Data.Items.Where(vv => vv.Value != Data.DeleteValue))
            {
              if (Data.GetTime(counter).Minute == currentminute)
              {
                newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currentminute = Data.GetTime(counter).Minute;
                if (!Accumulate)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
          if (!Accumulate)
            newvalues[newvalues.Count - 1] /= localcount;
          break;
        case TimeStepUnit.Second:
          break;
        case TimeStepUnit.None:
          break;
        default:
          break;
      }
      ToReturn.AddRange(newvalues.Select(n=>new ValueDouble(n)));

      return ToReturn;
    }
Exemple #13
0
    /// <summary>
    /// Changes the zoomlevel of a timespanseries
    /// </summary>
    /// <param name="Data"></param>
    /// <param name="NewZoomLevel"></param>
    /// <param name="Accumulate"></param>
    /// <returns></returns>
    public static IEnumerable<TimeSpanValue> ChangeZoomLevel(TimeSpanSeries Data, TimeStepUnit NewZoomLevel, bool Accumulate)
    {
      if (Data.TimeStepSize <= NewZoomLevel)
        return null;

      List<TimeSpanValue> ToReturn = new List<TimeSpanValue>();

      DateTime start = Data.StartTime;
      DateTime end = Data.EndTime;

      TimeSpanValue CurrentValue = new TimeSpanValue(GetTimeOfFirstTimeStep(start, NewZoomLevel), GetTimeOfFirstTimeStep(start, NewZoomLevel).AddTimeStepUnit(NewZoomLevel), 0);
      double currentcount = 0;
      foreach (var v in Data.Items.Where(dv => dv.Value != Data.DeleteValue))
      {
        if (CurrentValue.StartTime <= v.StartTime & v.StartTime<= CurrentValue.EndTime)
        {
          if (CurrentValue.EndTime >= v.EndTime) //We are still within the timespan
          {
            CurrentValue.Value += v.Value;
            currentcount++;
          }
          else //We exceed the timespan
          {
            double outsidefraction =(v.EndTime.Subtract(CurrentValue.EndTime).TotalDays / v.EndTime.Subtract(v.StartTime).TotalDays);
              CurrentValue.Value += v.Value*(1 - outsidefraction);
              currentcount += 1 - outsidefraction;

            if (!Accumulate & currentcount != 0)
              CurrentValue.Value /= currentcount;
            ToReturn.Add(CurrentValue);
            CurrentValue = new TimeSpanValue(CurrentValue.EndTime, CurrentValue.EndTime.AddTimeStepUnit(NewZoomLevel), v.Value*outsidefraction);
            currentcount = outsidefraction;
          }
        }
        else
        {
          if (!Accumulate & currentcount != 0)
            CurrentValue.Value /= currentcount;
          ToReturn.Add(CurrentValue);
          CurrentValue = new TimeSpanValue(GetTimeOfFirstTimeStep(v.StartTime, NewZoomLevel), GetTimeOfFirstTimeStep(v.StartTime, NewZoomLevel).AddTimeStepUnit(NewZoomLevel), v.Value);
          currentcount = 1;
        }
      }
      if (!Accumulate & currentcount != 0)
        CurrentValue.Value /= currentcount;
      ToReturn.Add(CurrentValue);

      return ToReturn;
    }
Exemple #14
0
 public static DateTime GetNextTime(DateTime Start, TimeStepUnit timespan)
 {
   switch (timespan)
   {
     case TimeStepUnit.Year:
       return Start.AddYears(1);
     case TimeStepUnit.Month:
       return Start.AddMonths(1);
     case TimeStepUnit.Day:
       return Start.AddDays(1);
     case TimeStepUnit.Hour:
       return Start.AddHours(1);
     case TimeStepUnit.Minute:
       return Start.AddMinutes(1);
     case TimeStepUnit.Second:
       return Start.AddSeconds(1);
     default:
       throw new Exception("TimeStepUnit not set");
   }
 }