C # convert the winform Gregorian calendar date to the lunar calendar date,
Copy the code: Pass in the corresponding parameter to use:
///
/// Get the current server Gregorian time to Lunar calendar time
///
// The sky is dry
private static string [] TianGan = {"A", "B", "C", "Ding", "pent", "Self", "Geng", "Sin", "Non", "Dec"};
// Earth branch
private static string [] DiZhi = {"子", "ugly", "In", "卯", "Chen", "巳", "Lu", "Wei", "Shen", "Yu", "戌"," Hai "};
// Zodiac signs
private static string [] ShengXiao = {"rat", "cow", "tiger", "rabbit", "dragon", "snake", "horse", "sheep", "monkey", "chicken", "dog" "," Pig "};
// Lunar Date
private static string [] DayName = {"*", "Junior", "Junior 2", "Junior 3", "Junior 4", "Junior 5"
"First Six", "First Seven", "First Eight", "First Nine", "First Ten",
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen",
"Sixteen", "Seventeen", "Eighteen", "Nineteen", "Twenty",
"Twenty One", "Twenty Two", "Twenty Three", "Twenty Four", "Twenty Five",
"Twenty Six", "Twenty Seven", "Twenty Eight", "Twenty Nine", "Thirty"};
// Lunar month
private static string [] MonthName = {"*", "positive", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" "," Eleven "," La "};
// Counting days in Gregorian calendar month
private static int [] MonthAdd = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
// Lunar calendar data
private static int [] LunarData = {2635,333387,1701,1748,267701,694,2391,133423,1175,396438
, 3402,3749,331177,1453,694,201326,2350,465197,3221,3402
, 400202,2901,1386,267611,605,2349,137515,2709,464533,1738
, 2901,330421,1242,2651,199255,1323,529706,3733,1706,398762
, 2741,1206,267438,2647,1318,204070,3477,461653,1386,2413
, 330077,1197,2637,268877,3365,531109,2900,2922,398042,2395
, 1179,267415,2635,661067,1701,1748,398772,2742,2391,330031
, 1175,1611,200010,3749,527717,1452,2742,332397,2350,3222
, 268949,3402,3493,133973,1386,464219,605,2349,334123,2709
, 2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};
///
/// Get the lunar calendar corresponding to the date
///
/// Gregorian date
///
public static string GetLunarCalendar (DateTime dtDay)
{
string sYear = dtDay.Year.ToString ();
string sMonth = dtDay.Month.ToString ();
string sDay = dtDay.Day.ToString ();
int year;
int month;
int day;
try
{
year = int.Parse (sYear);
month = int.Parse (sMonth);
day = int.Parse (sDay);
}
catch
{
year = DateTime.Now.Year;
month = DateTime.Now.Month;
day = DateTime.Now.Day;
}
int nTheDate;
int nIsEnd;
int k, m, n, nBit, i;
string calendar = string.Empty;
// Calculate the number of days until the initial time of February 8, 1921: 1921-2-8 (the first day of the first month)
nTheDate = (year-1921) * 365 + (year-1921) / 4 + day + MonthAdd [month-1]-38;
if ((year% 4 == 0) && (month> 2))
nTheDate + = 1;
// Calculate the sky dry, earth branch, month, day
nIsEnd = 0;
m = 0;
k = 0;
n = 0;
while (nIsEnd! = 1)
{
if (LunarData [m] <4095)
k = 11;
else
k = 12;
n = k;
while (n> = 0)
{
// Get the nth binary value of LunarData [m]
nBit = LunarData [m];
for (i = 1; i <n + 1; i ++)
nBit = nBit / 2;
nBit = nBit% 2;
if (nTheDate <= (29 + nBit))
{
nIsEnd = 1;
break;
}
nTheDate = nTheDate-29-nBit;
n = n-1;
}
if (nIsEnd == 1)
break;
m = m + 1;
}
year = 1921 + m;
month = k-n + 1;
day = nTheDate;
// return year + "-" + month + "-" + day;
#region Formatted date is displayed as March 24
if (k == 12)
{
if (month == LunarData [m] / 65536 + 1)
month = 1-month;
else if (month> LunarData [m] / 65536 + 1)
month = month-1;
}
// Chinese zodiac
calendar = ShengXiao [(year-4)% 60% 12] .ToString () + "year";
// The sky is dry
calendar + = TianGan [(year-4)% 60% 10] .ToString ();
// Earth branch
calendar + = DiZhi [(year-4)% 60% 12] .ToString () + "";
// Lunar month
if (month <1)
calendar + = "Leap" + MonthName [-1 * month] .ToString () + "Month";
else
calendar + = MonthName [month] .ToString () + "月";
// Lunar day
calendar + = DayName [day] .ToString () + "日";
return calendar;
#endregion
}