如何表示一天的开始时间和结束时间?

以2008年10月23日为例,是从2008-10-23 12:00:00 AM开始,到2008-10-23 11:59:59 PM结束吗?

有帮助吗?

解决方案

你的记谱很奇怪。我建议指定全天范围的标准方法是:

2008-10-23 00:00:00并完成2008-10-23 23:59:59

其他提示

我想引用一个网站, http://www.cl.cam.ac.uk/~mgk25/iso-time.html

一天中时间的国际标准表示法是

hh:mm:ss

其中 hh 是自午夜 (00-24) 以来经过的完整小时数,mm 是自小时开始 (00-59) 以来经过的完整分钟数,ss 是自午夜 (00-59) 以来经过的完整秒数分钟的开始 (00-60)。如果小时值为 24,则分钟和秒值必须为零。

笔记:在原子时标(例如协调世界时 (UTC))中插入闰秒期间,有时可能需要 ss 的值 60。巴黎国际地球自转服务组织宣布,每隔几年就会在 UTC 时标中插入一个闰秒 23:59:60,以防止 UTC 偏离不太恒定的天文时标 UT1 超过 0.9 秒。由地球的实际自转定义。实际上,您不太可能看到时钟显示 23:59:60。大多数同步时钟会在闰秒发生后的某个时间再次重新同步到 UTC,或者在接近闰秒的时间暂时减慢速度,以避免超出范围的时间戳可能导致的任何中断。

一个示例时间是

23:59:59

它代表午夜前一秒的时间。

与日期表示法一样,分隔冒号也可以省略,如下所示

235959

并且可以通过省略秒或同时省略秒和分钟来降低精度,如

23:59, 2359, or 23

还可以在小数点或逗号后添加秒的小数部分,例如午夜前 5.8 毫秒的时间可以写为

23:59:59.9942 or 235959.9942

由于每天都以午夜开始和结束,因此可以使用 00:00 和 24:00 两种表示法来区分与一个日期关联的两个午夜。这意味着以下两个符号指的是完全相同的时间点:

1995-02-04 24:00 = 1995-02-05 00:00

如果需要明确的时间表示,则 00:00 通常是午夜的首选表示法,而不是 24:00。数字时钟显示 00:00 而不是 24:00。

ISO 8601 没有指定其符号是否指定时间点或时间段。例如,这意味着 ISO 8601 没有定义 09:00 是指一天中第九个小时的确切结束时间,还是指从 09:00 到 09:01 的时间段或其他时间。如果有任何问题,标准的用户必须以某种方式就时间符号的确切解释达成一致。

如果日期和时间显示在同一行,则始终将日期写在时间前面。如果日期和时间值一起存储在单个数据字段中,则 ISO 8601 建议它们应使用拉丁大写字母 T 分隔,如 19951231T235959。

致美国读者的一句话:

这里指定的 24 小时时间表示法几十年来已经成为全世界书面语言的事实上的标准。唯一的例外是一些英语国家,这些国家仍然广泛使用小时在 1 到 12 之间以及“a.m.”和“p.m.”等附加符号。通用的 24 小时国际标准符号现在甚至在英国也被广泛使用(例如机场、电影院、公共汽车/火车时刻表等)。大多数其他语言甚至没有像“a.m.”和“p.m.”这样的缩写,而12h符号在欧洲大陆上几乎从未用于书写或显示时间。即使在美国,军队和计算机程序员也长期使用 24 小时表示法。

旧的英文 12 小时表示法有很多缺点,例如:

  • 它比正常的 24 小时表示法更长。
  • 人类以 12 小时表示法比较两个时间需要花费更多的时间。
  • 目前尚不清楚 00:00、12:00 和 24:00 是如何表示的。即使是百科全书和风格手册也包含相互矛盾的描述,一个常见的快速解决方法似乎是完全避免使用“中午”、“午夜”或“中午 12:01”,尽管“午夜”这个词仍然没有区分 00:00 和 24:00(给定一天开始或结束时的午夜)。
  • 它使人们常常认为第二天从“凌晨12:59”到“凌晨1:00”的溢出开始,这不仅是人们在午夜后不久试图对录像机的计时器进行编程时常见的问题。
  • 它不容易与字符串比较操作进行比较。
  • 不知道的是“ 12:00 am/pm”和“ 1:00 am/pm”之间的时间尚不清楚,从00:00或12:00开始,即英文的12h表示法比较难理解。

请考虑 12 小时时间是黑暗时代的遗迹,当时使用罗马数字,数字零尚未发明,模拟时钟是唯一已知的显示时间的形式。今天请避免使用它,尤其是在技术应用中!即使在美国,广受尊重的《芝加哥风格手册》现在也建议在出版物中使用国际标准时间表示法。

当然,如果你只想代表1天,你根本不需要包括时间 - 特别是因为这引起了关于一天开始或结束的讨论。根据我的经验,日期处理通常很复杂,没有引入任何额外的复杂性。

今天是2008年10月20日 - 不再需要更多信息。

或者我错过了什么?

十月23开始于2008-10-23 12 AM,结束于2008-10-24 12 AM—一天结束于下一个开始的完全相同的点。最后一秒开始于晚上11:59:59,但在一天结束之前你仍然有一整秒。

您在问题中提到的那一天的定义是> = 2008-10-23 00:00:00和< 2008-10-24 00:00:00。

如果您使用数学区间符号,则将其写为

  

[2008-10-23 00:00:00,2008-10-24 00:00:00)

[表示包含,表示最多但不包括。

通过这种方式,您可以更轻松地为用户和您自己。

这取决于你一天的意思。遗憾的是,日期处理总是比它看起来更复杂。

要将您的示例转换为24小时ISO日期格式,您可以说:

2008-10-23 00:00:00 - 2008-10-23 23:59:59

但是,取决于您是否将范围解释为包含或排除,可以省略当天的最后一秒*。程序员通常更喜欢保持上限独占,所以你会选择:

2008-10-23 00:00:00 - 2008-10-24 00:00:00

或者,作为一种更好的陈述方式,如果支持(或人类可读性):

2008-10-23 00:00:00 - 2008-10-23 24:00:00

*:实际上可能不止一个。如果跨度表示UTC时区中的一天(或与其对齐的另一个时区,很可能),那么在一天结束时23:59:60偶尔会有一个额外的“闰秒”尝试使UTC与恒星时间保持一致。下一个闰秒计划在今年年底。然而,许多系统忽略了闰秒,因为它们很愚蠢而烦人。

如果您想独立于时区表示“日历日”,最好的选择是朱利安日数。今天是2454760。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top