DateTime中是否存在年末的不连续性

时间:2014-12-30 18:42:01

标签: c# datetime

我希望明天为新年派对写一个倒数计时器,但我似乎遇到了subtracting two DateTimes来自彼此的问题。

我的应用程序似乎在处理2015年1月的日期(第一种方法)时工作正常,但是当我越过2014/2015年度边界(第二种方法)时,它会给出奇怪的结果。

有什么想法吗?

private static readonly string MyDateFormat = "{0:" + string.Join("", (-1).ToString("x").Skip(1)) + "}";

public void disKoud()
{
    var later = new DateTime(2015-01-01);
    var now = new DateTime(2015-01-31);
    var diff = (later - now);

    Debug.WriteLine(MyDateFormat, diff); // 0000030
}

public void sonderNHoed()
{
    var later = new DateTime(2015-01-01);
    var now = new DateTime(2014-12-31);
    var diff = (later - now);

    Debug.WriteLine(MyDateFormat, diff); // 0000042 ??? WTF
}

2 个答案:

答案 0 :(得分:16)

你没有构建自己认为的日期。这些行:

var later = new DateTime(2015-01-01);
var now = new DateTime(2014-12-31);

相当于:

var later = new DateTime(2013);
var now = new DateTime(1972);

毕竟,(2015 - 1) - 1是2013年,(2014 - 12) - 31是1972年。这只是简单的算术。

这些值都在公元0001年1月1日的第一秒内......因为你已经过了很多刻度。

你的意思是:

var later = new DateTime(2015, 01, 01);
var now = new DateTime(2014, 12, 31);

...将年,月和日作为单独的值传递给DateTime构造函数。

答案 1 :(得分:4)

有一点可以帮助你使用你的调试器。如果你将鼠标悬停在值上,你会清楚地看到它们实际上是在0001年。这肯定不是你所期待的!

enter image description here