我想得到两个日期的时差。我使用以下代码
string starttime='2015/01/25';
string endtime='2015/02/25';
DateTime date1=convert.ToDateTime(starttime);
DateTime date2=convert.ToDateTime(endtime);
TimeSpan timediff= endtime.Subtract(starttime);
在这里我得到负时间.为什么会发生.那么我怎么能得到一个正时间
endtime
早于(小于)starttime
,这就是你得到的:
DateTime starttime = new DateTime(2005, 5, 8);
DateTime endtime = new DateTime(2005, 5, 7);
TimeSpan timediff = endtime.Subtract(starttime); // minus one day
因为。。。数学。
显然,您的endtime
小于starttime
。这就是你得到负值的原因。 TimeSpan
有一个方法 as Duration
返回当前对象的绝对值。
顺便说一句,目前尚不清楚您为什么尝试解析您的starttime
并endtime
以DateTime
.由于您与他们一起使用Subtract
,因此两者都似乎已经DateTime
了。
此外,如果您没有自定义结构作为convert
,.NET Framework Convert
类以大写开头。(因为 C# 也区分大小写)这就是为什么您需要将其用作Convert.ToDateTime
。
编辑后,您的代码甚至不会再编译。您需要在字符串中使用双引号。
string starttime = "2015/01/25";
string endtime = "2015/02/25";
在这种情况下,我们看到它们实际上是字符串,而不是日期时间。计算TimeSpan
时,您需要使用date1
和date2
,而不是那些字符串。所以你的真实代码应该是;
string starttime = "2015/01/25";
string endtime = "2015/02/25";
DateTime date1 = Convert.ToDateTime(starttime);
DateTime date2 = Convert.ToDateTime(endtime);
TimeSpan timediff = date1.Subtract(date2);
返回-31.00:00:00
,因为这些日期之间有 31
天。