我正在开发一个应用程序,用户可以将采样频率设置在1-8小时之间,调整到最接近的完整时间,以收集和处理数据。
例-1,频率设置为8小时并开始@ 06:00:
-> 14:00 -> 22:00 -> 06:00 (加日)
例2,频率设置为3小时并开始@ 20:00:
20:00 -> 23:00 -> 02:00 (加日)-> 05:00
示例3,频率设置为3小时并开始@ 08:00 =日期更改没有问题:
08:00 -> 11:00 -> 14:00 -> 17:00
我在示例日期-时间“:00:00Z”上使用以下格式,但生成的唯一日期是当前日期,这意味着我需要在过午夜时添加一天。
我的问题是,如果需要的话,我还没有弄清楚如何确定,如果需要的话,当跨越到下一个日期时,不需要太多的spagetti代码?...given,即日期更改可以发生在任何2-4样例中。
然后试图确定但失败了。
任何帮助都将不胜感激。
发布于 2022-09-23 10:31:30
void Main()
{
string[] hours = {"06:00", "14:00", "22:00", "06:00"};
var baseDate = DateTime.Today;
for (int i = 0; i < hours.Length; i++)
{
var mins = TimeSpan.Parse(hours[i]).TotalMinutes;
if (i > 0 && mins < TimeSpan.Parse(hours[i - 1]).TotalMinutes)
baseDate = baseDate.AddDays(1);
var dt = baseDate.AddMinutes(mins);
Console.WriteLine(dt);
}
}你没告诉我们你真正需要什么。只要添加这些差异,代码就会更简单。
发布于 2022-09-23 11:11:41
您可以简单地比较第一个DateTime和第二个DateTime的frequency属性的值(通过将frequency值添加到第一个DateTime中创建)。如果他们不一样,你就进入了新的一天:
public static void Main()
{
var start = DateTime.Now;
var frequency = 8;
for (int i = 0; i < 10; i++)
{
var next = start.AddHours(frequency);
Console.Write("start hour: " + start.Hour + " -> next hour: " + next.Hour);
if (!start.Date.Equals(next.Date)) Console.Write(" (crossed over to next day)");
Console.WriteLine();
start = next;
}
Console.ReadKey();
}输出:
start hour: 11 -> next hour: 19
start hour: 19 -> next hour: 3 (crossed over to next day)
start hour: 3 -> next hour: 11
start hour: 11 -> next hour: 19
start hour: 19 -> next hour: 3 (crossed over to next day)
start hour: 3 -> next hour: 11
start hour: 11 -> next hour: 19
start hour: 19 -> next hour: 3 (crossed over to next day)
start hour: 3 -> next hour: 11
start hour: 11 -> next hour: 19https://stackoverflow.com/questions/73826179
复制相似问题