LoginSignup
4
2

More than 5 years have passed since last update.

新元号発表されたし各言語の西暦→和暦に関してまとめてみる。

Last updated at Posted at 2019-04-01

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

書き慣れた言語以外を調べて思うのは
業務で使いやすい言語はこういうところが
こなれてる言語だと思う。
でももうシステム上の和暦はやめよう。

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2