计算一整天c#

Oli*_*ver 9 c#

这是为了解决办公室对一整天所构成的意见的不同.

代表一整天(到第二天)我会说:

2011/03/03 00:00:00 - 2011/03/04 00:00:00 =一整天.

例如:

TimeSpan test = new DateTime(2011, 03, 04, 00, 00, 00) - new DateTime(2011, 03, 03, 00, 00, 00); 
Run Code Online (Sandbox Code Playgroud)

上面的代码给出的测试值为1.00:00:00,因此是一整天.

办公室的其他意见:

2011/03/03 00:00:00 - 2011/03/03 23:59:59 =一整天

如果有人可以打扰回复这个!! 他们认为哪个是正确的?

编辑:

几个月过去了,办公室里有"其他意见"的两个人不再在这里工作了......

R. *_*des 37

你想要一天,要求一天:

TimeSpan oneDay = TimeSpan.FromDays(1);
Run Code Online (Sandbox Code Playgroud)

区间[2011/03/03 00:00:00,2011/03/04 00:00:00 [跨越一整天.请注意,上限是打开的.如果您的粒度不小于一秒,那么该间隔与[2011/03/03 00:00:00,2011/03/03 23:59:59](封闭上限)完全相同.希望这清除了两种观点.

你也可以说你正在考虑瞬间,你的同事正在思考一秒钟的时间.想象一下,用几根木杆构成一个长栅栏,每对连续的电线杆用一串相同长度的电线连接起来.您可以说栅栏从极点0到极点10,您的同事可以说栅栏从字符串0变为字符串9.

根据您要执行的操作,两个视图都可以正确.在需要另一个的情况下使用这些观点之一是fencepost错误.

  • 这个.使用减法/差异来创建跨度可能会导致如此微妙的错误.而是从已知的常量构造它. (3认同)

Fre*_*örk 15

一整天包含86400秒.

DateTime start = new DateTime(2011, 3, 3, 0, 0, 0);
DateTime earlyEnd = new DateTime(2011, 3, 3, 23, 59, 59);
Console.WriteLine((earlyEnd - start).TotalSeconds); // prints 86399

DateTime lateEnd = new DateTime(2011, 3, 4, 0, 0, 0);
Console.WriteLine((lateEnd - start).TotalSeconds); // prints 86400
Run Code Online (Sandbox Code Playgroud)

这里令人困惑的部分是a DateTime代表一个确切的瞬间.今天的一整天从3月3日00:00的时刻开始,直到时间变​​成3月4日00:00的那一刻.瞬间没有任何长度,但我认为我们的思绪有些麻烦考虑时间,但同时又不给它任何长度.

从一个更哲学的角度,我们也许可以说,上面的代码示例将计算时间从开始一定第二,在年初某等第二.这清楚地表明,第一秒包含在计算的时间跨度中,但最后一秒则不包含在计算的时间范围内.

  • 挑剔:不要忘记闰秒.现实生活中的UTC日可能包括86399,86400或86401秒.虽然.NET不支持闰秒,据我所知,因此.NET日总是86400秒.http://en.wikipedia.org/wiki/Leap_second (4认同)