2012-02-20 11 views
2

TSQL DateDiffに対してC#でTimeSpan機能を使用すると、結果が異なるようです。 DateDiffは、タイムスタンプに関係なく、2つの日付の間の日数を与えているようですが、C#ではタイムスタンプを考慮しているようです。第一のタイムスタンプは午前10時で、そして第二のタイムスタンプは午前9時に次の日の場合DateDiff関数は、C#のDateTimeとDateTimeのスパンを使用して1C#でTSQLのDateDiffを正しくエミュレートする方法

declare @d1 datetime 
declare @d2 datetime 

set @d1 = '2/9/2011 10:00' 
set @d2 = '2/10/2011 09:00' 

select datediff(day, @d1, @d2) 
-- prints 1 

を返します。一方ので、タイムスパンは、0日です。

// will return 1 with same dates 
    private static int DateDiff(DateTime from, DateTime to) 
    { 
     return (new DateTime(from.Year, from.Month, from.Day) 
       - new DateTime(to.Year, to.Month, to.Day)).Days;    
    } 

質問がありますか?いいですか?

+0

DATEDIFFが交差し、そのような境界の数を返すためです。 [DATEDIFF(Transact SQL)](http://msdn.microsoft.com/en-us/library/ms189794.aspx) –

答えて

3

このようにあなたは、あなたの方法を短くすることができます:

private static int DateDiff(DateTime from, DateTime to) 
{ 
    return (to.Date - from.Date).Days;    
} 
0
public enum DateInterval 
    { 
     Second, Minute, Hour, Day, Week, Month, Quarter, Year 
    } 

    public long DateDiff(DateInterval Interval, System.DateTime StartDate, System.DateTime EndDate) 
    { 
     long lngDateDiffValue = 0; 
     System.TimeSpan TS = new System.TimeSpan(EndDate.Ticks - StartDate.Ticks); 
     switch (Interval) 
     { 
      case DateInterval.Day: 
       lngDateDiffValue = (long)TS.Days; 
       break; 
      case DateInterval.Hour: 
       lngDateDiffValue = (long)TS.TotalHours; 
       break; 
      case DateInterval.Minute: 
       lngDateDiffValue = (long)TS.TotalMinutes; 
       break; 
      case DateInterval.Month: 
       lngDateDiffValue = (long)(TS.Days/30); 
       break; 
      case DateInterval.Quarter: 
       lngDateDiffValue = (long)((TS.Days/30)/3); 
       break; 
      case DateInterval.Second: 
       lngDateDiffValue = (long)TS.TotalSeconds; 
       break; 
      case DateInterval.Week: 
       lngDateDiffValue = (long)(TS.Days/7); 
       break; 
      case DateInterval.Year: 
       lngDateDiffValue = (long)(TS.Days/365); 
       break; 
     } 
     return (lngDateDiffValue); 
    }//end of DateDiff 

私はこの方法では、私の作品を発見しました。このような

0

何か:

private static int DateDiff(DateTime From, DateTime To) 
{ 
    return From.Subtract(To).Days;    
} 
関連する問題