Why month in Java Date/Calendar is zero-based

以前從來沒有懷疑過為什麼 Java API 裡 java.util.Datejava.util.Calendar 的月份會是 zero-based. 以下這些資料給了答案: 因為當初, 所以現在…

這或許不是什麼太大的問題 (雖然這是個不該犯的錯), 反正只要記住月份跟別人不一樣, “規定" 是 zero-based 就好了… 直到自己想要開發一些跟日期時間有關的 library 時, 我遇到了與 JavaSoft 當初由 Date 提出 Calendar 時一樣的掙札 – 我的 API 要採 zero-based 或 one-based?

如果我採用 one-based, 就代表別人不能再用 Calendar 的常數來使用我的 API. 沒辦法, 只好跟著錯下去, 因此最後我還是決定一起淌這個混水, 採用 zero-based

這真是太可怕了, 不得不警惕自己在規劃 API 時一定要很謹慎, 因為 API 這種東西一旦對 caller 承諾了, 就難以收回… 真是一言既出、駟馬難追!!