為什麼有些編程語言中的月從0開始, 日卻從1開始?

2013-07-11 06:10:58 +08:00
 013231
有些編程語言表示日期的類型非常奇怪, 月份從0開始, 日期卻從1開始. 例如Javascript的Date, Java的java.util.Calendar, C的tm.
追根溯源的話, Javascript和Java的奇怪特性似乎是從C繼承下來的. 那麼C當年為什麼要設計成這個樣子呢?
3310 次点击
所在节点    编程
9 条回复
013231
2013-07-11 06:12:52 +08:00
@Livid 本節點建議放入"技术"分类.
nybux
2013-07-11 08:00:18 +08:00
一月二月,只是中国人的说法。老外点月份不是按数字点的,所以月份从0开始。而日期都是按数字点的。
alexrezit
2013-07-11 08:03:09 +08:00
@nybux
但是老外也有用数字表示月份的习惯嘛...
gDD
2013-07-11 08:03:33 +08:00
@nybux 但是2001-01-01这种写法的时候还是需要按数字点的啊。
013231
2013-07-11 08:12:49 +08:00
@nybux 這種說法恐怕解釋不通. 且不說編程時月份確實是用數字表示的, 如果你在stackoverflow上搜索過就會知道, 許多外國人對這個問題同樣不解; 另外, 也有很多編程語言(例如C#和Python)月份就是從1開始的.
nybux
2013-07-11 08:16:12 +08:00
nybux
2013-07-11 08:17:15 +08:00
years and days are considered numbers in spoken language, but months have their own names. So because January is the first month it will be stored as offset 0, the first array element.
nybux
2013-07-11 08:22:45 +08:00
其实星期也有同样的问题。老外星期从星期天开始,所以星期天就是0,星期一就是1。这样我们还可以接受。如果老外也是从星期一开始。那发觉星期一是0。那习惯中国点星期的方式的人,就会感到很困惑了。
nybux
2013-07-11 08:29:25 +08:00
另外月份可能需要以其他形式输出,所以我觉得从0开始也会很方便。
比如:
const char* monstr[] = {"一月", "二月", "三月", ...};
打印的时候直接就可以
printf("%s-%d\n", monstr[mon], date);了,如果从1开始,那就要麻烦一点了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/75423

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX