时间跨度上午到下午 c#

Timespan AM to PM c#

我正在从事一个涉及轮班工作的项目,因此我需要随着时间的推移正确显示轮班。我目前有 3 个班次(shifth = start shifthe = end),如下所示。 Shift1 上午 8 点到下午 4 点 Shift2 4:01PM-12:01AM 和 Shift3 12:02AM-7:59AM AM 时间覆盖了我的下午时间,因为我在军事时间所以他们永远不会改变它只是停留在 shift3。任何帮助将不胜感激,下面是我的代码。

 private void shifts_Tick(object sender, EventArgs e)
    {


      if (DateTime.Now.TimeOfDay >= new TimeSpan(Settings.Default.shift1h,Settings.Default.shift1m, 0) && DateTime.Now.TimeOfDay <= new TimeSpan(Settings.Default.shift1he, Settings.Default.shift1me, 0))
        {
            txtbxname1.Text = "Shift1";
        }

           if (DateTime.Now.TimeOfDay >= new TimeSpan(Settings.Default.shift2h, Settings.Default.shift2m, 0)  && DateTime.Now.TimeOfDay <= new TimeSpan(Settings.Default.shift2he, Settings.Default.shift2me, 0))
          {
              txtbxname1.Text = "Shift2";
          }
         if (DateTime.Now.TimeOfDay >= new TimeSpan(Settings.Default.shift3h, Settings.Default.shift3m, 0) && DateTime.Now.TimeOfDay <= new TimeSpan(Settings.Default.shift3he, Settings.Default.shift3me, 0))
          {
              txtbxname1.Text = "Shift3";
          }
    }

如果你用if...else if ...else就没有问题

if (DateTime.Now.TimeOfDay >= ...... first shift selection logic ....)
{
    txtbxname1.Text = "Shift1";
}
else if (DateTime.Now.TimeOfDay >= ....second shift selection logic...)        
{
    txtbxname1.Text = "Shift2";
}
else // everything else is the third shift
{
    txtbxname1.Text = "Shift3";
}

最简单的方法是从午夜开始获取当前 TimeSpan,计算分钟并将它们与基准值进行比较,例如(我只计算了第三班次的值):

var minutes = (DateTime.Now - DateTime.Today).TotalMinutes;
if (minutes < 2)
    txtbxname1.Text = "Shift2";
else if (minutes < thirdShiftMinutesValue)
    txtbxname1.Text = "Shift3";
else if (minutes < firstShiftMinutesValue)
    txtbxname1.Text = "Shift1";
else
    txtbxname1.Text = "Shift2";