考虑日期和时间时-过去或将来的今天是午夜吗?


9

这一直是我的难题-我意识到,严格来说,这并不是编程或软件开发中的问题,但在我们领域似乎是一个合理的常见问题。

例如,如果我将到期日期时间设置为2011-04-08 00:00:00-并且鉴于我当前的本地时间是8日的10:45-我已经过期了吗?还是我还有半天左右的时间?

一天中午夜“属于”哪个标准?

还是我应该从英国军方那里取一片叶子,说一天结束于23:59:59,开始于00:00:01,并且没有午夜?


等待等待,您的位置在哪里?现在是几号?是08还是07?
Sufendy 2011年

对不起-更清楚地表明我已经是八号了(我在南非阿德莱德)
HorusKol 2011年

1
所以您基本上是在问00:00:00小于还是大于10:45:00?
马丁·约克

我会拿叶子。许多处理计划的组织都避免使用00:00:00(和12:00:00)。对于那些不使用24小时制的国家/地区,AM / PM代号也有些混乱。
dbasnett 2011年

在某些情况下24:00:00,用于描述一天结束时的午夜。
CodesInChaos

Answers:


17

我认为在编程(oracle和php,不确定是否使用其他语言)中,午夜是一天的开始。例如,如果您截断(sysdate),您将得到2011-04-08 00:00:00,这是我们的过去。

因此,当时钟从23:59:59更改为00:00:00时,日期实际上从2011-04-08更改为2011-04-09


2
是的,这一天在午夜00:00:00结束。
quick_now 2011年

这是正确的AFAIK。一个困惑可能是,在随意的演讲中,“今天午夜”可能意味着今天结束时的午夜,因为这更可能是人们上床睡觉之前而不是醒来之后。
杰克五世。

3

@Phelios答案的附录,如果您的时间是00:00:00,则不一定是午夜。相反,这是一个无限大的时间点集,所有时间点之间的最大距离小于1秒。例如,所有00:00:00.345、00:00:00.567和00:00:00.842显然都位于午夜的新天,但是出于显示目的,它们会缩短为“ 00:00:00”。同样,23:59:59:899位于午夜的旧日。因此,午夜本身就是您在实践中永远不会碰到的日子之间的无限短时间跨度。


这是一次,必须指出理论与“授权” 实践之间的区别是很重要的:在实践中,键入日期/时间的用户几乎不会被打扰输入秒。更不用说毫秒了。实际上,确定事件时间的计时设备可能不支持毫秒。实际上,即使计时设备确实支持毫秒,也不能保证存储格式由于某种原因不会舍入/截断一部分时间。
幻灭了

1

这与使用圆形几何体计算角度之间的差异相似,例如0度和360度(以及720度等)都相同。那么350度和10度之间有什么区别?

答:这取决于您要测量的方式-可能是20度或340度。但是,计算角度差实际上是很麻烦的。除非您转换为使常规加法和减法按常规操作的内部形式,否则时差计算也同样混乱。或者,您使用了一个现代的类库,它神奇地将所有内容隐藏起来(因此从不教任何人实际的细节)。


在这两种情况下,您可以指定只有一个办法,二十四小时(或圆形)作为“积极”
HorusKol

真正。但是,编写代码以进行计算并每次正确设置它确实需要一些思考。
quick_now 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.