どうでもいいカレンダーの話。
iOSをやってるとあるあるなのが、ユーザーがOSの端末設定を「和暦」に設定してるせいで、取得されるカレンダーが日本のものになってしまい、NSDateFormatter
が期待通りに動作しないというもの。
海外のアプリは和暦を考慮してないので上手くいけばクラッシュさせることができます。
西暦
現在普及しているのは西暦です。
個人的に、西暦という呼び方は物凄い雑だと思います。一般にグレゴリオ暦を指しますが、グレゴリオ暦そのものは暦法なのに対して、和暦は紀年法なので、暦法と紀年法の区別が付いていないケースが見られます。
1年の長さを定義するのが暦法で、今が何年なのか紀元を定義するのが紀年法です。
単に西暦と呼んだ場合、グレゴリオ暦という暦法と、イエス生誕の翌年を西暦元年とする紀年法両方を指す気がします。
Before Christ
(キリスト生誕前)は英語なのに、Anno Domini
(主の年)はラテン語という、この良く分からない紀年法は1500年くらい前に考案されるも実際に普及したのは19世紀で、西洋諸国の植民地支配によって世界標準な地位を築きました。
また、実際的にユリウス暦が使われるケースがあることにも注意です。例えば天文学で使われる「1光年」が指すのは、グレゴリオ暦の1年ではなくユリウス暦の1年なのです。
仏暦
仏教徒を中心に、釈迦が入滅した翌年を元年とする仏暦が利用されています。
歴史は浅く、100年くらい前にタイで考案され使われ始めました。
タイは意地でもこの暦を使う気なのか、公文書などにも使いやがります。しかもタイ数字です。読めません。
Wikipediaには太陽暦とのずれがあると書いてあるけどこれは間違ってる気がする?今は普通に543で算出できたような…。
OSの表記などで「タイ仏暦」とあるのは、国によって釈迦入滅の年の解釈、つまり紀元年が違うためです。本当は複数の仏暦があるのですがそのうち利用頻度の高い「タイ仏暦」のみ扱われることが多いです。
和暦
日本では1500年ほど元号による紀年法を使い続けています。また、使われていた暦法は以下の通りです。
- 元嘉暦
- 儀鳳暦
日本書紀で使われていたとされる暦です。
- 大衍暦
- 宣明暦
このころまでは中国で使われていた暦をそのまま日本でも利用していました。日本では暦学や天体観測技術が発達していなかったという事情があります。
- 貞享暦
ここで初めて国内独自の暦法が採用されました。この辺の話は天地明察が面白いので読むべきです。
あの話だと授時暦の扱いはよくないけど、授時暦の観測精度そのものは、ユリウス暦を超える部分もありました。
- 宝暦暦
そんな貞享暦は、800年以上続いた宣明暦とは裏腹に、たった70年しか持ちませんでした。
貞享暦による改暦は幕府と朝廷の間の軋轢を生んで、天文方の政治力がなくなったところで、再び土御門家が席捲、この残念な暦を制定してしまったとかどうとか。
天地明察は安井知哲の次男を天文方3代にしたところでハッピーエンドみたいな終わり方してますけど、その後の渋川家の顛末はなんとも切ない。
- 寛政暦
宝暦暦があまりにも酷すぎたので改定された暦。
わりと現役。今でもカレンダーに書いてある「旧暦」が天保暦のことなのです。
最後の暦ということでかなりの高精度だったながら、2033年に突入するとバグります。
現在使われている暦法。日本で制定されたのは明治6年からなので、明治5年以前を正しく算出するには旧暦への変換が必要で面倒です。
なおグレゴリオ暦が完全な暦法かというとそうではなくて、3000年で1日というレベルながらズレがあり、そもそもグレゴリオ暦の根拠となっている太陽年自体が不変ではないという問題がありますが、生きてるうちは関係なさそうです。
その他
週番号
ヨーロッパのカレンダーで使われます。週に連番振ってるだけなんですけど、月曜始まりなので注意です。
iOS5と6とで、NSDateFormatter
でYYYY
とyyyy
で取得できる値が変わる現象があって、YYYY
の方は週番号ベースだから年が違うみたいなstackoverflow見て信じてたんですけど、あれただのバグだったんですね…(iOS7で直った。でもyyyy
を使いましょう)。
iOS8で使えるカレンダー
これらは西暦カレンダーに併記されるという、雑な扱いを受けています。
- 中国暦
ヒジュラ暦っぽい。
こちらは普通にユダヤ暦。
Androidのカレンダー
しかし AndroidはJavaじゃない ので、実装を見る限り両方とも使えなさそうです。
今でも和暦を使うところって結構多い(行政とか銀行とか保険屋とか)と思うんですけど、JapaneseImperialCalendar
がないAndroidで和暦が使えなくて困った、みたいな話はあんまり聞かないですね。