Windowの新元号対応は今はレジストリで管理されているので
ネットワークが外にさえ繋がっていればWindows Updateでなんとかなる。
MacはNSJapaneseCalendarとやらがあるみたいだけどまぁそのうちこっそりアップデートが来るでしょう。
では西暦から元号(和暦)を表示するプログラムを書くには各言語でどうしたら良いのだろうと思いまとめてみた。
Ruby
Date.parse("H31.04.01")
Date.new("2019, 4, 1).jisx0301
フォーマットはSYYMMDD
。
warekiという素敵なライブラリも。
https://github.com/sugi/wareki
C
素では無理そう。あとは環境に依存しそう。
そういう言語は大体西暦和暦テーブル持ってて引き算してる。
西暦を和暦に変換するプログラム
https://tondol.hatenablog.jp/entry/20070829/1188314937
Cのライブラリは大量にありそうなので割愛。
C#
System.Globalization.CultureInfo ci =
new System.Globalization.CultureInfo("ja-JP", false);
date.ToString("gy年MM月dd日", ci);
冒頭にも書いたようにWindowsアップデートかレジストリへの追加が必要。
フォーマットはgyMMDD
PHP
PHPも標準では用意はされていなさそう。
引き算方式で出してるのは以下
PHPで西暦⇔和暦変換
https://gist.github.com/kazua/8135329
素敵なライブラリ?は以下。
PHPで和暦・日本語曜日を使う
https://qiita.com/chiyoyo/items/da32649b0e04957856c1
Python
当然のように標準ではなさそう。
素敵にまとめられていた記事。
pythonで和暦
https://qiita.com/arc279/items/eed44771027a4e2b8708
Java
Locale locale = new Locale("ja", "JP", "JP");
Calendar calendar = Calendar.getInstance(locale);
DateFormat wareki = new SimpleDateFormat("GGGGy年M月d日", locale);
G4個で漢字(令和)、G1個で(R)表記。
流石に大丈夫だろうけど上記はJava6から。
JavaScript
検索すると引き算方式が先頭に出てくるけど
toLocaleDateStringでいけそう。
const dt = new Date(2019, 0, 1).toLocaleDateString("ja-JP-u-ca-japanese");
第二引数が0でおや?となったけどどうやら月は0オリジン。きもっ。
moment.jsも和暦は対応してないのでまたnode_modulesが太る。
Perl
引き算方式。
[ Perl ] 西暦から元号のついた和暦に変換する
http://hensa40.cutegirl.jp/archives/2561
VBscript
引き算方式。
https://selifelog.com/blog-entry-173.html
Swift
用意されてた。
let f = DateFormatter()
f.locale = Locale.current
f.calendar = Calendar(identifier: .japanese)
f.dateFormat = "Gy" // 平成31
書き慣れた言語以外を調べて思うのは
業務で使いやすい言語はこういうところが
こなれてる言語だと思う。
でももうシステム上の和暦はやめよう。