2016-07-20 41 views
-3

工作我想減去實際時間計算的一​​些秒這樣做:減不日期時間

DateTime start = new DateTime(); 
start = DateTime.Now.Subtract(Convert.ToDateTime(stringTime)); 

它說這個參數是不是「時間跨度」,但日期時間應該是有效的太...它必須接受這兩種參數。

我的工作與Framework 2.0的Windows窗體上的VS 2012

更新:發現錯誤;減法返回時間跨度。

start = Convert.ToDateTime(Convert.ToDateTime(stringTime).Subtract(DateTime.Now)); 

正在工作。

謝謝。

+2

如果你'31 2016年1月減2016' 1月1日,什麼*日期*您期望從這一走?這沒有意義,結果是30天,而不是約會。 –

回答

2

如果將DateTime類型參數傳遞給Subtract()方法,則返回類型是TimeSpan。如果您傳遞TimeSpan類型,則返回值是DateTime。

因此,這兩種類型都被接受爲參數,你只需要確保你有正確的返回類型。

看看DateTime.cs http://referencesource.microsoft.com/#mscorlib/system/datetime.cs,1057

public TimeSpan Subtract(DateTime value) { 
     return new TimeSpan(InternalTicks - value.InternalTicks); 
    } 

public DateTime Subtract(TimeSpan value) { 
    long ticks = InternalTicks;    
    long valueTicks = value._ticks; 
    if (ticks - MinTicks < valueTicks || ticks - MaxTicks > valueTicks) { 
     throw new ArgumentOutOfRangeException("value", Environment.GetResourceString("ArgumentOutOfRange_DateArithmetic")); 
    } 
    return new DateTime((UInt64)(ticks - valueTicks) | InternalKind); 
} 
4

您可以:

  1. 減去TimeSpan,產生DateTime,或
  2. 減去DateTime,產生TimeSpan

您試圖減去DateTime,產生DateTime。沒有這樣的方法。

+1

不錯的邏輯:你可以說,從Today中減去一小時(TimeSpan)並獲得另一個'DateTime';或從今天減去昨天,並得到一天'TimeSpan'; +1 –