先日、de:code 2019 に参加してきました。
その中で最後に聴講した「C# ドキドキ・ライブコーディング対決 @ de:code - ONLY C#!! Blazor Web 開発バトル -」というセッションがとても面白く、選択して大正解でした。
登壇者の皆様、素晴らしいセッションをありがとうございます。
■ 私も書いてみたい!
その中で出たお題として C# で令和を表示というものがあって、自分だったらどう書けるだろう? と思ったのでちょっと電車の中で書いてみました。Blazor はまだ着手していないので、コンソールアプリです。Console.ReadLine
で読んだ西暦日付テキストを和暦にして Console.WriteLine
しています。
電車の中なのであまりちゃんとは考えもデバッグもしてません。バグありそう。
■ 私なりの令和元年
using System; using System.Linq; namespace SeirekiToWareki { class Program { static void Main(string[] args) { // 入力を読み取り var input = Console.ReadLine(); // 和暦に変換 var wareki = new (DateTime start, string gengo)[] { (new DateTime(2019, 05, 01), "令和"), (new DateTime(1989, 01, 08), "平成"), (new DateTime(1926, 12, 25), "昭和"), (new DateTime(1912, 07, 30), "大正"), (new DateTime(1868, 10, 23), "明治"), }.OrderBy(g => g.start).Select(g => new { Seireki = DateTime.TryParse(input, out var seireki) ? (DateTime?)seireki : null, Gengo = g }).Where(g => g.Seireki != null).TakeWhile(g => g.Seireki >= g.Gengo.start).Select(g => new { year = g.Seireki.Value.Year - g.Gengo.start.Year + 1, Seireki = g.Seireki.Value, Gengo = g.Gengo.gengo }).Select(g => $"{g.Gengo}{(g.year == 1 ? "元" : g.year.ToString())}年{g.Seireki.Month}月{g.Seireki.Day}日").LastOrDefault() ?? "和暦に変換できませんでした."; // 和暦を表示 Console.WriteLine(wareki); } } }
■ 実行してみる
2019/05/01
令和元年5月1日
なんだかそれらしい結果になりました。