Why
为什么一个看上去简简单单的时间表示在写程序时候会如此复杂?其实时间记录充满了地域性,时间,重量,长度等度量往往在统计方式与单位上都有许多差异。 比如中国自古以月阴晴为统计周期诞生了“阴历”,而现今国际通用的为以地球公转作为统计周期的“阳历”。 比如星期体系当中周日与周一哪天为一周的**“第一天”** 问题。(在不同地区,一星期的开始时间并不完全一致。许多英语国家、犹太教、日本是星期日,埃及人的一星期是从星期六开始的。多数欧洲国家都以星期一为一星期的第一天。而中国大陆习惯上也认为星期一是开始时间。引自百度百科) 包括时区问题,24小时制与12小时制问题,闰年问题等等。 即便是仅讨论现代通用公制日期统一时,也会有统计单位,展示形式,传输方式等多种问题需要解决。
What
- 国际统计单位与通用形式: ISO8601 (嗯,这个标准是收费的),所以可参阅国内的兼容版本:https://doc.mbalib.com/view/0c9ca195b4e3f4d8413e1bd323a7e4d8.html ,或者wikipedia: https://en.wikipedia.org/wiki/ISO_8601
- 计算机语言实现时间展示标准(date format): RFC 3339 https://tools.ietf.org/html/rfc3339 , w3c https://www.w3.org/TR/NOTE-datetime
- 时间传输协议: 基础规范RFC 867 868 。具体实现RFC 1305 5905 https://tools.ietf.org/html/rfc5905
Feature
我在这边简单抽取搬运了下ISO8601及衍生的规则:
- 分隔符:
- Date格式:
Fact
事实上各个编程语言并未完全遵循ISO8601的标准
-
JAVA 除DD变为年日外,其他基本一致,但是部分参数不支持,来源java.text.DateFormatSymbols:
-
PYTHON
-
C/C++ 嗯~ 提供接口,不提供标format
-
JavaScript 提供接口,但是没有标准format