C# - 两个日期之间的差异?

7

我正在尝试计算两个日期之间的差值。目前我使用的代码如下:

int currentyear = DateTime.Now.Year;

DateTime now = DateTime.Now;
DateTime then = new DateTime(currentyear, 12, 26);
TimeSpan diff = now - then;
int days = diff.Days;
label1.Text = days.ToString() + " Days Until Christmas";

除了放假之外,一切都很正常。我猜这是因为它不计算不到24小时的完整一天。有没有办法让它这样做呢?谢谢。

4个回答

13
int days = (int)Math.Ceiling(diff.TotalDays);

无法隐式将'type'类型转换为'int'。存在显式转换(是否缺少强制转换?) - Rubens Farias
1
int days = Convert.ToInt32(Math.Ceiling(diff.TotalDays));整型变量天数等于向上取整时间差的总天数。 - user
哎呀,我以为 Math.Ceiling 返回的是 int 类型... 现在想想感觉有点傻。 - LorenVS
有什么想法为什么它在天数前面返回一个“-”? - user
哦,哇,我感觉很蠢。好吧,我改了那个,然后它返回的天数是错误的,所以最终我还是使用了我最初的 int days = diff.Days;。 - user

2
这个问题有点哲学性质:如果明天就是圣诞节,你会认为还剩下1天,还是已经没有剩余时间?如果你将明天这一天考虑在内,答案是0。

1
如果您替换以下内容,您的问题将得到解决:

DateTime.Now

使用:

DateTime.Today

因为你的差异计算将会以整天为单位进行。


0
通常我使用以下代码来获得输出结果,以达到所需单位的预期效果:
        DateTime[] dd = new DateTime[] { new DateTime(2014, 01, 10, 10, 15, 01),new DateTime(2014, 01, 10, 10, 10, 10) };

        int x = Convert.ToInt32((dd[0] - dd[1]).TotalMinutes);

        String unit = "days";

        if (x / 60 == 0)
        {
            unit = "minutes";
        }

        else if (x / 60 / 24 == 0)
        {
            unit = "hours";
            x = x / 60;
        }

        else
        {
            x = x / (60 * 24);
        }

        Console.WriteLine(x + " " + unit);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接