[英]DateTime group by date or hours
01.02.2010 0:00:00-> 01.02.2010随时
01.02.2010 0:00:00-> 01.02.2010 0:任何分钟和几秒钟
所以这是我的约会:
DateTime x;
字符串为01.02.2010 0:00:00
x.Date.ToString()
在这里我比较日期
DatarowsForOneDay = dt.Select("DailyRecTime= '" + x.ToString() + "'");
因此,如何在不考虑分钟和秒的情况下按日期+小时分组。
您可以编写自己的IEqualityComparer<DateTime>
来仅比较您关心的DateTime部分。 LINQ的GroupBy具有一个IEqualityComparer
的重载。 我最近也遇到了同样的问题,并且做到了。
但是您必须在转换为字符串之前调用GroupBy
。 如果不能,则可能需要创建一个IEqualityComparer<string>
并在比较之前将字符串解析回DateTime
。
我现在没有原始代码。 我从内存中重新输入了此内容,但未对其进行测试。
public class DateAndHourComparer : IEqualityComparer
{
public bool Equals(DateTime x, DateTime y)
{
var xAsDateAndHours = AsDateHoursAndMinutes(x);
var yAsDateAndHours = AsDateHoursAndMinutes(y);
return xAsDateAndHours.Equals(yAsDateAndHours);
}
private DateTime AsDateHoursAndMinutes(DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month,
dateTime.Day, dateTime.Hour,
dateTime.Minute, 0);
}
public int GetHashCode(DateTime obj)
{
return AsDateHoursAndMinutes(obj).GetHashCode();
}
}
我从未做过基于字符串的版本,但是它可以使用上面的基于DateTime
的代码,看起来像...
public class DateAndHourStringComparer : IEqualityComparer
{
private readonly DateAndHourComparer dateComparer = new DateAndHourComparer();
public bool Equals(string x, string y)
{
var xDate = DateTime.Parse(x);
var yDate = DateTime.Parse(y);
return dateComparer.Equals(xDate, yDate);
}
public int GetHashCode(string obj)
{
var date = DateTime.Parse(obj);
return dateComparer.GetHashCode(date);
}
}
我没有测试过,没有添加空值检查或格式检查。 该代码旨在演示总体思路。
您可以使用DateTime.ToString(string pattern)传递参数。 更多信息@ http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.