繁体   English   中英

DateTime按日期或小时分组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM