ここでは、指定した年の干支(六十干支、十干、十二支)を取得する方法を紹介します。
.NET Framework 2.0以降では、和暦、太陰太陽暦(旧暦)の計算に対応したJapaneseLunisolarCalendarクラスを使用出来ます。JapaneseLunisolarCalendarクラスのGetSexagenaryYearメソッドで六十干支(十干十二支、天干地支)を、GetCelestialStemメソッドで十干(天干)を、GetTerrestrialBranchメソッドで十二支(地支)を取得できます。
これらのメソッドは整数を返します。GetSexagenaryYearメソッドは1から60の整数を返し、1は甲子に60は癸亥に対応しています。GetCelestialStemメソッドは1から10の整数を返し、1は甲に10は癸に対応しています。GetTerrestrialBranchメソッドは1から12の整数を返し、1は子に12は亥に対応しています。
Dim dt As New DateTime(2000, 8, 1) 'JapaneseLunisolarCalendarオブジェクトを作成する Dim jlc As New System.Globalization.JapaneseLunisolarCalendar() '六十干支を取得する Dim sexagenaryYear As Integer = jlc.GetSexagenaryYear(dt) '十干を取得する Dim celestialStem As Integer = jlc.GetCelestialStem(sexagenaryYear) '十二支を取得する Dim terrestrialBranch As Integer = jlc.GetTerrestrialBranch(sexagenaryYear) '結果を表示する Console.WriteLine("干支:{0} / 十干:{1} / 十二支:{2}", _ sexagenaryYear, celestialStem, terrestrialBranch) '干支:17 / 十干:7 / 十二支:5
DateTime dt = new DateTime(2000, 8, 1); //JapaneseLunisolarCalendarオブジェクトを作成する System.Globalization.JapaneseLunisolarCalendar jlc = new System.Globalization.JapaneseLunisolarCalendar(); //六十干支を取得する int sexagenaryYear = jlc.GetSexagenaryYear(dt); //十干を取得する int celestialStem = jlc.GetCelestialStem(sexagenaryYear); //十二支を取得する int terrestrialBranch = jlc.GetTerrestrialBranch(sexagenaryYear); //結果を表示する Console.WriteLine("干支:{0} / 十干:{1} / 十二支:{2}", sexagenaryYear, celestialStem, terrestrialBranch); //干支:17 / 十干:7 / 十二支:5
JapaneseLunisolarCalendarは太陰太陽暦で計算するため、干支が変わるのは1月1日ではなく、2月ごろになるようです。
自分で計算しても難しくはないです。
以下に、指定した年(西暦)の干支を返すメソッドの例を示します。「干支 - Wikipedia」で紹介されている方法を使って計算しています。
''' <summary> ''' 指定した年の十干(天干)を取得する。 ''' </summary> ''' <param name="year">西暦の年。</param> ''' <returns>指定した年の干を示す1文字。</returns> Public Shared Function GetKan(ByVal year As Integer) As Char Const jikkan As String = "庚辛壬癸甲乙丙丁戊己" Return jikkan(year Mod 10) End Function ''' <summary> ''' 指定した年の十二支(地支)を取得する。 ''' </summary> ''' <param name="year">西暦の年。</param> ''' <returns>指定した年の支を示す1文字。</returns> Public Shared Function GetShi(ByVal year As Integer) As Char Const juunishi As String = "申酉戌亥子丑寅卯辰巳午未" Return juunishi(year Mod 12) End Function ''' <summary> ''' 指定した年の干支(六十干支、十干十二支、天干地支)を取得する。 ''' </summary> ''' <param name="year">西暦の年。</param> ''' <returns>指定した年の干支を示す2文字。</returns> Public Shared Function GetEto(ByVal year As Integer) As String Return New String(New Char() {GetKan(year), GetShi(year)}) End Function
/// <summary> /// 指定した年の十干(天干)を取得する。 /// </summary> /// <param name="year">西暦の年。</param> /// <returns>指定した年の干を示す1文字。</returns> public static char GetKan(int year) { const string jikkan = "庚辛壬癸甲乙丙丁戊己"; return jikkan[year % 10]; } /// <summary> /// 指定した年の十二支(地支)を取得する。 /// </summary> /// <param name="year">西暦の年。</param> /// <returns>指定した年の支を示す1文字。</returns> public static char GetShi(int year) { const string juunishi = "申酉戌亥子丑寅卯辰巳午未"; return juunishi[year % 12]; } /// <summary> /// 指定した年の干支(六十干支、十干十二支、天干地支)を取得する。 /// </summary> /// <param name="year">西暦の年。</param> /// <returns>指定した年の干支を示す2文字。</returns> public static string GetEto(int year) { return new string(new char[] { GetKan(year), GetShi(year) }); }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。