【发布时间】: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 >= sessionStarttime.TimeOfDay && dateNow.TimeOfDay < sessionEndtime.TimeOfDay)吗? -
@derHugo 是的,适用于当前会话。但我想知道这是否还没有开始,所以我可以显示剩余时间。否则,我将选择当前会话。在进行当前会话时,我还应该知道下一次会话时间。