2010-03-09 120 views
2

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

所以你怎麼能不關心我組按日期+時間約分和秒。

+0

我想我太接受了字面意思。你只需要幫助格式化? – 2010-03-09 10:58:14

+0

我需要羣...但這也是關於格式化的一種比較方法 – Cynede 2010-03-09 11:06:14

回答

5

您可以編寫自己的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); 
    } 
} 

我沒有測試過,我沒加null檢查或格式檢查。該代碼旨在說明總體思路。

+0

您可以分享一些示例代碼嗎? – Cynede 2010-03-09 10:46:39