2016-07-20 43 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 –