013231
V2EX  ›  编程

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

  •  
  •   013231 · Jul 11, 2013 · 3900 views
    This topic created in 4688 days ago, the information mentioned may be changed or developed.
    有些編程語言表示日期的類型非常奇怪, 月份從0開始, 日期卻從1開始. 例如Javascript的Date, Java的java.util.Calendar, C的tm.
    追根溯源的話, Javascript和Java的奇怪特性似乎是從C繼承下來的. 那麼C當年為什麼要設計成這個樣子呢?
    9 replies    1970-01-01 08:00:00 +08:00
    013231
        1
    013231  
    OP
       Jul 11, 2013
    @Livid 本節點建議放入"技术"分类.
    nybux
        2
    nybux  
       Jul 11, 2013
    一月二月,只是中国人的说法。老外点月份不是按数字点的,所以月份从0开始。而日期都是按数字点的。
    alexrezit
        3
    alexrezit  
       Jul 11, 2013
    @nybux
    但是老外也有用数字表示月份的习惯嘛...
    gDD
        4
    gDD  
       Jul 11, 2013 via Android
    @nybux 但是2001-01-01这种写法的时候还是需要按数字点的啊。
    013231
        5
    013231  
    OP
       Jul 11, 2013
    @nybux 這種說法恐怕解釋不通. 且不說編程時月份確實是用數字表示的, 如果你在stackoverflow上搜索過就會知道, 許多外國人對這個問題同樣不解; 另外, 也有很多編程語言(例如C#和Python)月份就是從1開始的.
    nybux
        6
    nybux  
       Jul 11, 2013
    nybux
        7
    nybux  
       Jul 11, 2013
    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  
       Jul 11, 2013
    其实星期也有同样的问题。老外星期从星期天开始,所以星期天就是0,星期一就是1。这样我们还可以接受。如果老外也是从星期一开始。那发觉星期一是0。那习惯中国点星期的方式的人,就会感到很困惑了。
    nybux
        9
    nybux  
       Jul 11, 2013
    另外月份可能需要以其他形式输出,所以我觉得从0开始也会很方便。
    比如:
    const char* monstr[] = {"一月", "二月", "三月", ...};
    打印的时候直接就可以
    printf("%s-%d\n", monstr[mon], date);了,如果从1开始,那就要麻烦一点了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3725 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 10:41 · PVG 18:41 · LAX 03:41 · JFK 06:41
    ♥ Do have faith in what you're doing.