Ruby に令和がやってきた 🎉
Ruby 2.6.3 リリース
2019/04/17 (水) に Ruby 2.6.3 がリリースされました。
主な変更点は
このリリースでは日本の新元号「令和」のサポートを追加しています。 具体的には Unicode のバージョンを 12.1 beta に更新する (#15195) とともに、date ライブラリを更新しています (#15742)。
とのことです。
ついに Ruby に令和がやってきましたね!
確認
Unicode について
「令和」の合字1 である U+32FF が Unicode 12.1 で予約されています。そして Ruby 2.6.3 ではそのベータ版である Unicode 12.1 beta をサポートしています。
Ruby 2.6.2
"\u32FF"
#=> "\u32FF"
Ruby 2.6.3
# 2019/04/18 (木) 時点では、ほとんどのフォントがまだ U+32FF (令和の合字) に対応していないので
# ほとんどの環境で豆腐になってしまう。
"\u32FF"
#=> "㋿"
# NFKD で Unicode 正規化すると……
"\u32FF".unicode_normalize(:nfkd)
#=> "令和"
令和きたー
Date について
Date#jisx0301 メソッドで和暦 (JIS X 0301 形式) を取得できるのですが、これが令和に対応しました。
Ruby 2.6.2
require 'date'
Date.new(2019, 4, 30).jisx0301
#=> "H31.04.30"
Date.new(2019, 5, 1).jisx0301
#=> "H31.05.01"
Ruby 2.6.3
require 'date'
Date.new(2019, 4, 30).jisx0301
#=> "H31.04.30"
Date.new(2019, 5, 1).jisx0301
#=> "R01.05.01"
R01 きたー
おまけ
Date オブジェクトを和暦の文字列に変換するメソッドを実装してみました。
def wareki(date)
era_initials = %w[M T S H R]
era_names = %w[明治 大正 昭和 平成 令和]
wday_names = %w[日 月 火 水 木 金 土]
jisx0301_pattern = /\A([A-Z]?)(\d+)[\.-](\d+)[\.-](\d+)\z/
era_initial, year, month, day = date.jisx0301.match(jisx0301_pattern).captures
era_name = era_initials.zip(era_names).to_h[era_initial]
wday_name = wday_names[date.wday]
format('%s%d年%d月%d日(%s)', era_name, year, month, day, wday_name)
end
require 'date'
wareki(Date.new(1872, 12, 31))
#=> "1872年12月31日(火)"
wareki(Date.new(1873, 1, 1))
#=> "明治6年1月1日(水)"
wareki(Date.new(2019, 4, 30))
#=> "平成31年4月30日(火)"
wareki(Date.new(2019, 5, 1))
#=> "令和1年5月1日(水)"
Author And Source
この問題について(Ruby に令和がやってきた 🎉), 我々は、より多くの情報をここで見つけました https://qiita.com/QUANON/items/bdd31eab4f9d699551fe著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .