強火で進め

このブログではプログラム関連の記事を中心に書いてます。

JapaneseCalendarを使ってみた

Unityで使用可能な.NETクラスを見ていたらJapaneseCalendarなるものが有ったのでちょっと調べて使ってみました。.NETにはこんなクラスも有るんですね。

調べてみたらこのドキュメントが参考になりそうでした。残念ながらJScriptのサンプルが無かったのでC#で作ってみました。

JapaneseCalendar.GetYear メソッド (System.Globalization)
http://msdn.microsoft.com/ja-jp/library/system.globalization.japanesecalendar.getyear(v=vs.80).aspx

プログラムはこちら。動作内容は和暦での「現在の年月日」と「2年10ヶ月後」の年月日を表示するというものです。

以下の2つのファイルを適当なGameObjectに貼り付けて動作させて下さい。

【SamplesJapaneseCalendar.cs】

using UnityEngine;
using System;
using System.Globalization;


public class SamplesJapaneseCalendar : MonoBehaviour {

	public static void Main()  {
		DateTime myDT = DateTime.Now;
		JapaneseCalendar myCal = new JapaneseCalendar();

		Debug.Log( "本日:" );
		DisplayValues(myCal, myDT);

		// 2年10ヶ月進める
		myDT = myCal.AddYears( myDT, 2 );
		myDT = myCal.AddMonths( myDT, 10 );

		Debug.Log( "2年10ヶ月後:" );
		DisplayValues( myCal, myDT );

	}

	public static void DisplayValues( Calendar myCal, DateTime myDT )  {
		String Gengo = "";
		switch(myCal.GetEra( myDT )) {
			case 1:
				Gengo = "明治";
				break;
			case 2:
				Gengo = "大正";
				break;
			case 3:
				Gengo = "昭和";
				break;
			case 4:
				Gengo = "平成";
				break;
		}
		Debug.Log(Gengo+myCal.GetYear( myDT )+"年"+myCal.GetMonth( myDT )+"月"+myCal.GetDayOfMonth( myDT )+"日");
	}

}

【TestScript.cs】

using UnityEngine;
using System.Collections;

public class TestScript : MonoBehaviour {

	void Start () {
		SamplesJapaneseCalendar.Main();
	}
	
}

プログラムは元のサンプルを一部、Unity向けに修正するだけで動作しました。
この辺りはUntiyにC#が採用されている大きな利点ですね。

関連情報

数値と年号(元号)の対応ルールはこちらを参照。

JapaneseCalendar.GetEra メソッド (System.Globalization)
http://msdn.microsoft.com/ja-jp/library/system.globalization.japanesecalendar.getera(v=VS.80).aspx