检查小时的If语句总是有问题,因为我的数据库返回24小时格式,当12pm <= 1pm时返回false。 这是代码:
public void SkippedDailyTask()
{
var pendingtasks = GetPendingTasks();
if (pendingtasks.Count() == 0)
{
Console.WriteLine("Empty List");
}
else
{
foreach (var item in pendingtasks)
{
if (item.EndTime.Hour <= DateTime.Now.Hour)
{
if (item.EndTime.Minute <= DateTime.Now.Minute)
{
item.StatusReturner = StatusReturner.Skipped;
}
else
{
Console.WriteLine("Empty List");
}
context.SaveChanges();
}
}
}
}
答案 0 :(得分:-1)
DateTime.Hour
始终以24小时格式返回小时值作为整数。选中https://docs.microsoft.com/en-us/dotnet/api/system.datetime.hour?view=netframework-4.8
因此,如果您的item.EndTime.Hour
在下午12:00返回12,而当前时间是下午1:00,则if (item.EndTime.Hour <= DateTime.Now.Hour)
条件应返回true,因为DateTime.Now.Hour
等于13。
此外,与您的问题无关,但您正在使用pendingTasks
检查pendingtasks.Count()
的计数。在C#中,length/count
的可迭代对象被实现为属性而不是方法。
答案 1 :(得分:-3)
public void SkippedDailyTask()
{
var pendingtasks = GetPendingTasks();
if (pendingtasks.Count() == 0)
{
Console.WriteLine("Empty List");
}
else
{
foreach (var item in pendingtasks)
{
var hourNow = Convert.ToInt32(DateTime.Now.ToString("HH"));
// var hourItem = item.EndTime.Hour;
var hourItem = Convert.ToInt32(item.EndTime.ToString("HH"));
if (hourItem <= hourNow)
{
if (item.EndTime.Minute <= DateTime.Now.Minute)
{
item.StatusReturner = StatusReturner.Skipped;
}
else
{
Console.WriteLine("Empty List");
}
context.SaveChanges();
}
}
}
}