【问题标题】:How to Schedule Event for particular Time in a Day如何为一天中的特定时间安排活动
【发布时间】:2021-06-26 11:31:40
【问题描述】:

我有一个包含一些数据的 JSON。每天都有一些会话,每个会话都有开始和结束时间字符串值。所以我需要做的是获取即将到来的会话的剩余时间,当前会话和下一个会话。

JSON:

  {
  "Days": [
    {
      "DayDate": "29/06/2021",
      "DayName": "Tuesday, 29th June",
      "DayTitle": "Day 1",
      "Sessions": [
        {
          "TimeSlot": {
            "StartTime": "16:00",
            "EndTime": "17:00"
          }
        },
        {
          "TimeSlot": {
            "StartTime": "17:00",
            "EndTime": "18:00"
          }
        },
        {
          "TimeSlot": {
            "StartTime": "18:00",
            "EndTime": "19:30"
          }
        }
      ]
    }
  ]
}

我尝试了不同的逻辑,但没有得到正确的输出。

例如:

 Session _nextSession;
public Session NextSession()
{
    DateTime dateNow = DateTime.Now;

    foreach (var session in _dataSet.Days[CurrentDayCount()].Sessions)
    {
        DateTime sessionStarttime = DateTime.Parse(session.TimeSlot.StartTime);
        DateTime sessionEndtime = DateTime.Parse(session.TimeSlot.EndTime);
       
        if (dateNow.TimeOfDay < sessionStarttime.TimeOfDay && dateNow.TimeOfDay < sessionEndtime.TimeOfDay)
        {
            _nextSession = session;
        }
       


    }
    return _nextSession;
}

在上面的示例中,我正在检查当前时间以及会话开始和结束时间,但对于每个会话都是如此。

然后我尝试列出会话中所有开始时间的列表,并将最接近的时间与当前时间进行比较:

 var closestStartTime = (from t in startTimes
                                orderby (t - timeNow).Duration()
                                select t).First();

但是这个问题是一旦时间过去了大约 30 分钟,它会给我下一个会话时间,但当前会话还没有结束。

我现在没有想法,明天是最后期限。请帮我解决一下这个。谢谢。

【问题讨论】:

  • 你不想if (dateNow.TimeOfDay &gt;= sessionStarttime.TimeOfDay &amp;&amp; dateNow.TimeOfDay &lt; sessionEndtime.TimeOfDay)吗?
  • @derHugo 是的,适用于当前会话。但我想知道这是否还没有开始,所以我可以显示剩余时间。否则,我将选择当前会话。在进行当前会话时,我还应该知道下一次会话时间。

标签: c# .net unity3d


【解决方案1】:

您似乎想获取当前和下一个会话时间段。

所以你可以先OrderBy所有会话按时间,FindIndex当前会话,然后获取下一个会话,如

var sessions = _dataSet.Days[CurrentDayCount()].Sessions.ToList();
var currentSessionIndex = sessions.FindIndex(session => DateTime.Parse(session.TimeSlot.StartTime).TimeOfDay <= dateNow.TimeOfDay && DateTime.Parse(session.TimeSlot.StartTime).TimeOfDay > dateNow.TimeOfDay);

// No current session found at all?
if(currentSessionIndex < 0) return null;

var nextIndex = currentSessionIndex + 1;

// If current session is not the last one return the next session 
return currentSessionIndex < sessions.Count -1 ? sessions[currentSessionIndex + 1] : null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2022-01-24
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多