当前位置:  开发笔记 > 编程语言 > 正文

DateTime按日期或小时分组

如何解决《DateTime按日期或小时分组》经验,为你挑选了1个好方法。

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() + "'");

那么我怎么能按日期+小时分组而不关心分钟和秒.



1> Mike Two..:

您可以自己编写IEqualityComparer,只比较您关心的DateTime部分.LINQ的GroupBy有一个需要的重载IEqualityComparer.我最近遇到了同样的问题而且做到了这一点.

但是你必须GroupBy在转换为字符串之前调用它.如果你不能那么你可能想要在比较之前创建一个IEqualityComparer并将字符串解析回来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);
    }
}

我没有测试过,我没有添加空检查或格式检查.该代码旨在展示一般概念.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有