元ネクスタイドの上司のF様からおしえていただきました~。
ありがとうございましたm(_ _)m

旧暦、六曜を求めたい場合、.NET Framework 2.0 がなんと!
便利なメソッドを用意してくれているそうです!

http://msdn2.microsoft.com/ja-jp/library/system.globalization.japaneselunisolarcalendar(VS.80).aspx

MSDN ライブラリ > .NET 開発 > .NET Framework SDK > クラス ライブラリ リファレンス > System.Globalization > JapaneseLunisolarCalendar クラス

NET Framework クラス ライブラリ 

JapaneseLunisolarCalendar クラス 

月、日、年などの区分で時間を表します。年の計算には、和暦と同じ方法が使用されます。日および月は、太陰太陽暦を使用して計算されます。

解説

JapaneseLunisolarCalendar クラスは、太陰太陽暦を表す EastAsianLunisolarCalendar クラスから派生しています。EastAsianLunisolarCalendar クラスでは、太陽暦と、太陰太陽暦、年が時代 (年号) に関連付けられ 60 年周期を持つ暦、および年の任意の月の後に閏月を置くことができる暦との間の日付の変換がサポートされます。

閏月は、年の任意の月の後に置くことができます。たとえば、GetMonth メソッドは、特定の日付に関連付けられた月を示す 1 ~ 13 の範囲の数値を返します。閏月が 8 番目の月と 9 番目の月の間にある場合、GetMonth メソッドは、8 番目の月に 8 を返し、8 番目の閏月に 9 を返し、9 番目の月に 10 を返します。

現在、JapaneseLunisolarCalendarCultureInfo クラスがサポートしているどのカルチャでも使用されていません。したがって、このクラスは、日本の太陰太陽暦での日付を計算するためだけに使用できます。

CultureInfo は一連の暦をサポートしています。Calendar プロパティは、カルチャの既定の暦を返し、OptionalCalendars プロパティは、そのカルチャがサポートしているすべての暦の配列を返します。CultureInfo が使用する暦を変更するには、CultureInfo.DateTimeFormatCalendar プロパティを新しい Calendar に設定します。


ということで、サンプルもいただいてしまったので、早速つかってみたw
以下の、WinFormアプリを作成。



お待ちかねのコードはこちら(なぜか VB)


Public Class Form1

 

  ' カレンダーの日付を選択した時のイベントハンドラ

  Private Sub MonthCalendar1_DateChanged(ByVal sender As System.Object, _

       ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged

 

    TextBox1.Text = e.Start.ToLongDateString()

    TextBox2.Text = SetJapaneseLunisolar(e.Start)

  End Sub

 

  'JapaneseLunisolarCalendar(日本の太陰太陽暦=旧暦)

  Function SetJapaneseLunisolar(ByVal selectDay As Date) As String

    Dim jpnOldDays As Globalization.JapaneseLunisolarCalendar _

      = New Globalization.JapaneseLunisolarCalendar

    Dim oldMonth As Integer = jpnOldDays.GetMonth(selectDay)    '旧暦の月を取得

    Dim oldDay As Integer = jpnOldDays.GetDayOfMonth(selectDay) '旧暦の日を取得 

 

    '閏月を取得

    Dim uruMonth As Integer = _

        jpnOldDays.GetLeapMonth(jpnOldDays.GetYear(selectDay), _

                                jpnOldDays.GetEra(selectDay))

    '閏月がある場合の旧暦月の補正

    If (uruMonth > 0) And (oldMonth - uruMonth >= 0) Then

      oldMonth = oldMonth - 1                                   '旧暦月の補正

    End If

 

    '六曜を求める

    Dim rokuyo As Integer = (oldMonth + oldDay) Mod 6

    Dim rokuyoString As String = ""

 

    Select Case rokuyo

      Case 0

        rokuyoString = "大安"

      Case 1

        rokuyoString = "赤口"

      Case 2

        rokuyoString = "先勝"

      Case 3

        rokuyoString = "友引"

      Case 4

        rokuyoString = "先負"

      Case 5

        rokuyoString = "仏滅"

    End Select

 

    Return oldMonth & "" & oldDay & "" & "(閏月)" & uruMonth & " 六曜" & rokuyoString

 

  End Function

End Class


C#の例(VBを置き換えただけ・・・)


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Globalization;

 

namespace JapaneseLunisolarCalendarWinCS

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void monthCalendar1_DateChanged(object sender,

                       DateRangeEventArgs e)

        {

            textBox1.Text = e.Start.ToLongDateString();

            textBox2.Text = SetJapaneseLunisolar(e.Start);

        }

 

        //JapaneseLunisolarCalendar(日本の太陰太陽暦=旧暦)

        private string SetJapaneseLunisolar(DateTime selectDay)

        {

            JapaneseLunisolarCalendar jpnOldDays =

                new JapaneseLunisolarCalendar();

            int oldMonth = jpnOldDays.GetMonth(selectDay); //旧暦の月を取得

            int oldDay = jpnOldDays.GetDayOfMonth(selectDay);//旧暦の日を取得 

 

            //閏月を取得

            int uruMonth = jpnOldDays.GetLeapMonth(

                    jpnOldDays.GetYear(selectDay),

                    jpnOldDays.GetEra(selectDay));

 

            //閏月がある場合の旧暦月の補正

            if ((uruMonth > 0) && (oldMonth - uruMonth >= 0))

            {

                oldMonth = oldMonth - 1;              //旧暦月の補正

            }

 

            //六曜を求める

            int     rokuyo       = (oldMonth + oldDay) % 6;

            string rokuyoString = "";

 

            switch (rokuyo)

               {

                case   0:

                    rokuyoString = "大安";

                    break;

                case 1:

                    rokuyoString = "赤口";

                    break;

                case 2:

                    rokuyoString = "先勝";

                    break;

                case 3:

                    rokuyoString = "友引";

                    break;

                case 4:

                    rokuyoString = "先負";

                    break;

                case 5:

                    rokuyoString = "仏滅";

                    break;

                      default:

                    rokuyoString = "";

                    break;

            }

 

            return oldMonth.ToString() + ""

                    + oldDay.ToString() + ""

                    + "(閏月)" + uruMonth.ToString()

                    + " 六曜 " + rokuyoString;

 

        }

    }

}


たったこれだけっす!