V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
013231
V2EX  ›  编程

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

  •  
  •   013231 · 2013-07-11 06:10:58 +08:00 · 3391 次点击
    这是一个创建于 4148 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有些編程語言表示日期的類型非常奇怪, 月份從0開始, 日期卻從1開始. 例如Javascript的Date, Java的java.util.Calendar, C的tm.
    追根溯源的話, Javascript和Java的奇怪特性似乎是從C繼承下來的. 那麼C當年為什麼要設計成這個樣子呢?
    9 条回复    1970-01-01 08:00:00 +08:00
    013231
        1
    013231  
    OP
       2013-07-11 06:12:52 +08:00
    @Livid 本節點建議放入"技术"分类.
    nybux
        2
    nybux  
       2013-07-11 08:00:18 +08:00
    一月二月,只是中国人的说法。老外点月份不是按数字点的,所以月份从0开始。而日期都是按数字点的。
    alexrezit
        3
    alexrezit  
       2013-07-11 08:03:09 +08:00
    @nybux
    但是老外也有用数字表示月份的习惯嘛...
    gDD
        4
    gDD  
       2013-07-11 08:03:33 +08:00 via Android
    @nybux 但是2001-01-01这种写法的时候还是需要按数字点的啊。
    013231
        5
    013231  
    OP
       2013-07-11 08:12:49 +08:00
    @nybux 這種說法恐怕解釋不通. 且不說編程時月份確實是用數字表示的, 如果你在stackoverflow上搜索過就會知道, 許多外國人對這個問題同樣不解; 另外, 也有很多編程語言(例如C#和Python)月份就是從1開始的.
    nybux
        6
    nybux  
       2013-07-11 08:16:12 +08:00
    nybux
        7
    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
        8
    nybux  
       2013-07-11 08:22:45 +08:00
    其实星期也有同样的问题。老外星期从星期天开始,所以星期天就是0,星期一就是1。这样我们还可以接受。如果老外也是从星期一开始。那发觉星期一是0。那习惯中国点星期的方式的人,就会感到很困惑了。
    nybux
        9
    nybux  
       2013-07-11 08:29:25 +08:00
    另外月份可能需要以其他形式输出,所以我觉得从0开始也会很方便。
    比如:
    const char* monstr[] = {"一月", "二月", "三月", ...};
    打印的时候直接就可以
    printf("%s-%d\n", monstr[mon], date);了,如果从1开始,那就要麻烦一点了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3222 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:33 · PVG 20:33 · LAX 04:33 · JFK 07:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.