gpt4 book ai didi

c# - 循环开始到结束时间跨度过夜

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:25 25 4
gpt4 key购买 nike

希望一切顺利!

我希望我已经解决了这个问题,但看起来我们今天早上遇到了一些错误。

这是一个 asp.net web 应用程序,这部分是用 c# 编写的。我们正在动态填充下拉列表,其中包含 openTime、closeTime 和 15 分钟的间隔,它们都是 TimeSpan 类型。

TimeSpan interval = new TimeSpan(0,15,0);

for (TimeSpan i = openTime; i <= closeTime; i = i.Add(interval))
{

string stringTime = i.ToString();
ddlTime.Items.Add(new ListItem(stringTime, stringTime));
}

如果时间不超过午夜,这会很好用。例如:

  • 开放时间:07:00(上午 7:00)
  • 关闭时间:10:00(上午 10:00)

将按预期填充:

  • 07:00:00
  • 07:15:00
  • 07:30:00
  • 07:45:00
  • >。
  • >。
  • 10:00:00

这不起作用的地方是开门时间在午夜之前开始,而关门时间在午夜之后开始。

  • 开放时间:11:00(上午 11:00)
  • 关闭时间:02:00(凌晨 2:00)

我需要填充

  • 11:15:00
  • 11:30:00
  • 11:45:00
  • .
  • .
  • .
  • 2:00:00

但是您很快就会知道,循环不会运行,因为在这种情况下 openTime 不 <= 到 closeTime。

简单地创建另一个 for 循环来检查是否 closeTime <= openTime 不会给出预期的结果。我会得到:

  • 02:00:00
  • 02:15:00
  • 02:30:00
  • .
  • .
  • .
  • 11:00:00

在该主题上更有经验的任何人都可以提供成功运行所需的逻辑。

谢谢你的时间,克里斯。

最佳答案

听起来最好为每个开始和结束创建一个 DateTime,然后遍历 that 直到到达结尾,取 每个值的 TimeOfDay:

TimeSpan interval = TimeSpan.FromMinutes(15);

for (DateTime current = openTime; current <= closeTime; current += interval)
{
string stringTime = current.TimeOfDay.ToString();
ddlTime.Items.Add(new ListItem(stringTime, stringTime));
}

现在,如果您的开放时间为(比如)2012 年 6 月 28 日晚上 11 点,关闭时间为 2012 年 6 月 29 日凌晨 2 点,那么它就可以正常工作。

如果您将打开/关闭时间作为 TimeSpans,您总是可以使用:

// The dates don't really matter here... we just want a sample start/end
// for an opening period
DateTime open = new DateTime(2000, 1, 1) + openTimespan;
DateTime close = new DateTime(2000, 1, 1) + closeTimespan;

if (open > close)
{
close = close.AddDays(1);
}

当然,我个人会推荐使用我自己的 .NET 日期/时间 API,Noda Time ,它有一个特定的 LocalTime 类型,但那是另一回事 :)

关于c# - 循环开始到结束时间跨度过夜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11248436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com