我正在开发股票软件。每 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根蜡烛-
- 2018年9月22日10:30(9:15至10:30 = 75分钟)
- 22-9-2018 11:45
- 22-9-2018 1:00
- 22-9-2018 2:15
- 22-9-2018 3:30
我需要具有与上面提到的代码相同的代码,它将为这五个块计算相同的值。
我发现的问题是,如果我们从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之前,它的值都相同。
答案 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();