将日期时间与字符串时间进行比较,采用24小时格式

时间:2014-04-28 13:21:49

标签: c# datetime-format

我有以下代码:

public string startTime = "0900";
public string closeTime = "1730";


public class TimesInfo
{
    public string Code { get; set; }
    public DateTime startTime { get; set; }
    public DateTime closeTime { get; set; }
}

示例数据:

List<TimesInfo> list = new List<TimesInfo>();
list.Add(new TimesInfo { EmpCode = "101", startTime=”2011-04-28 10:00”, closeTime=”2011-04-28 12:00” });
list.Add(new TimesInfo { EmpCode = "102", startTime=”2011-04-28 09:00”, closeTime=”2011-04-28 17:00” });
list.Add(new TimesInfo { EmpCode = "103", startTime=”2011-04-28 10:00”, closeTime=”2011-04-28 18:00” });
list.Add(new TimesInfo { EmpCode = "104", startTime=”2011-04-28 11:00”, closeTime=”2011-04-28 16:00” });

我希望在List<TimesInfo>startTime之间找到closeTime

因此,从上面的列表中我们应该能够检索除代码103之外的所有员工,因为18:00晚于17:00。

2 个答案:

答案 0 :(得分:0)

您应首先将字符串解析为TimeSpan

TimeSpan start = TimeSpan.ParseExact(startTime, "hhmm", CultureInfo.InvariantCulture);
TimeSpan close = TimeSpan.ParseExact(closeTime, "hhmm", CultureInfo.InvariantCulture);

然后你可以使用这个LINQ查询:

List<TimesInfo> inRange = list
 .Where(ti => ti.startTime.TimeOfDay >= start && ti.closeTime.TimeOfDay <= close)
 .ToList();

答案 1 :(得分:0)

最干净的方法是使startTimecloseTime(变量,而不是类成员)TimeSpan个对象。然后,您可以将它们与DateTime成员的TimeOfDay进行比较:

list.Where(ti => ti.startTime.TimeOfDay >= startTime &&
                 ti.closeTime.TimeOfDay <= closeTime)