为一天的多个DateTime创建75分钟的时间块

时间:2018-06-22 06:03:16

标签: c# .net datetime

我正在开发股票软件。每 5分钟我在哪里蜡烛。因此,每选择一个说30分钟的时间范围,我们要做的就是-

struct C : public A, public B
{
  void move(float x, float y)
  {
    A::x += x;
    A::y += y;
    B::x += x;
    B::y += y;  
  }
};

以上一行每半小时的块i返回相同的值。 e。 10:35,10:40 ..... 11:00的蜡烛这样,只要更改long val = (long)(D * 24 * 60) / 30; //D is datetime of candle converted in OA date in double. //The above code never create problem as (24*60)%30 == 0. ,我们就可以很容易地找出半个小时的数据块。

现在,我们面临着以相同方式实现val块的挑战。我们的市场从9:15开始,到3:30结束。假设需要计算75-Mins的日期是75-Mins,为此,我需要精确地低于时间的5根蜡烛-

  
      
  1. 2018年9月22日10:30(9:15至10:30 = 75分钟)
  2.   
  3. 22-9-2018 11:45
  4.   
  5. 22-9-2018 1:00
  6.   
  7. 22-9-2018 2:15
  8.   
  9. 22-9-2018 3:30
  10.   

我需要具有与上面提到的代码相同的代码,它将为这五个块计算相同的值。

我发现的问题是,如果我们从12:00开始75,那么市场时间的块将在 8:45到10:00 ,而我们要求从 9:15开始到第一块10:30

(24 * 60)%75 = 15,所以每天 15分钟的差异也会干扰第二天的计算。

更新-

为了澄清问题,对于10:35至11:45的一段,我将有蜡烛,如10:35、10:40、10:45 ..... 11:45。对于所有这些日期时间,我需要一个相同的数字返回值。蜡烛时间11:50到来后,返回的数值将更改,我的新75 Min块将开始。直到1:00之前,它的值都相同。

1 个答案:

答案 0 :(得分:2)

您可以像这样使用循环或linq查询:

var startTime = new DateTime(2018, 09, 22, 9, 15, 0);
var times = Enumerable.Range(1, 5).Select(x => startTime.AddMinutes(x * 75)).ToList();

示例

这也是有关如何分割日期范围的另一个示例。在以下示例中,我还将开始时间也包括在结果中:

IEnumerable<DateTime> Split(DateTime start, DateTime end, int minutes)
{
    if (minutes <= 0)
        throw new ArgumentException(
            $"'{nameof(minutes)}' should be greater than 0.",
            nameof(minutes));
    var result = start;
    while (result <= end)
    {
        yield return result;
        result = result.AddMinutes(minutes);
    }
}

这是用法:

var startTime = new DateTime(2018, 09, 22, 9, 15, 0);
var endTime = startTime.AddHours(7);
var times = Split(startTime, endTime, 75).ToList();