2014年06月25日

C#で西暦から和暦変換

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その19

■問題 (出題者:ocean さん)
西暦を和暦に変換するプログラムを書いてください。元号の切り替わる日など、
複数の表記が可能な場合には両方表示し、西暦が無効な日付の場合には「範囲外」と
表示するようにしてください。対応すべき日付は明治元年以降とします。

>a.py 1868/12/2
明治1年12月2日

>a.py 1926/12/24
大正15年12月24日

>a.py 2007/12/01
平成19年12月1日

>a.py 1926/12/25
大正15年12月25日 昭和1年12月25日

>a.py 1868/1/2
範囲外

>a.py 1868/100/2
範囲外

「複数の表記が可能な場合には両方表示し」という要求を満たすコードの部分では、元号を漢字2文字に限定したコードとしています。

■C#で書いたコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace Doukaku.Org {
    class Program {
        static void Main(string[] args) {
            // あくまでもJapaneseCalendar を使うことにこだわったコード
            while (true) {
                string s = Console.ReadLine();
                try {
                    CultureInfo culture = new CultureInfo("ja-JP", true);
                    culture.DateTimeFormat.Calendar = new JapaneseCalendar();
                    DateTime datetime = DateTime.Parse(s);

                    string s1 = datetime.ToString("ggy年M月d日", culture);
                    string s2 = datetime.AddDays(-1).ToString("ggy年M月d日", culture);
                    if (s1.Substring(0, 2) != s2.Substring(0, 2))
                        s1 += " " + s2.Substring(0, 2) + s1.Substring(3);
                    Console.WriteLine(s1);
                } catch {
                    Console.WriteLine("範囲外です");
                }
            }
        }
    }
}


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52373423