DateTime日期相减疑问:为何两日期间隔返回0而非1?
为什么这段代码的日期差值返回0而非1?
代码示例:
MessageBox.Show($"{(DateTime.Now.AddDays(1)-DateTime.Now).Days}");
原因
问题出在两次调用DateTime.Now上:
- 第一次调用
DateTime.Now获取当前时间,调用AddDays(1)得到24小时后的时间; - 第二次调用
DateTime.Now时,已经过了极短的时间(比如几毫秒),此时的时间比第一次晚一点; - 两者的差值是不到24小时(比如23小时59分59秒多),而
TimeSpan.Days属性只统计完整的24小时周期数,所以结果是0。
解决办法
有两种常见的修复方式:
先把当前时间存入变量,避免两次调用的时间差:
var currentTime = DateTime.Now; MessageBox.Show($"{(currentTime.AddDays(1) - currentTime).Days}");这样差值正好是24小时,
Days返回1。如果只关心日期的差值(忽略具体时间),可以使用
Date属性取日期部分计算:MessageBox.Show($"{(DateTime.Now.AddDays(1).Date - DateTime.Now.Date).Days}");不管当前时间是几点,日期差都会是1。
内容的提问来源于stack exchange,提问作者Ekin Ekin
相关产品推荐
相关产品推荐

