using System;
using System.Data.SqlTypes;
using System.Globalization;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString SolarToLunar(string time)
{
//转阴历
ChineseLunisolarCalendar cncld = new ChineseLunisolarCalendar();
DateTime dt = DateTime.Parse(time);
int year = cncld.GetYear(dt);
int flag = cncld.GetLeapMonth(year);
int month = flag > 0 ? cncld.GetMonth(dt) - 1 : cncld.GetMonth(dt);
int day = cncld.GetDayOfMonth(dt);
int monthbk = month;
if (flag > 0)
{
if (month < flag )
{
month = month + 1;
}
if (flag - 1 == monthbk)
{
month = month - 1;
}
}
return $"{(flag-1 == monthbk ? "润" : "")}{year}-{(month.ToString().Length == 1 ? "0" + month : month + "")}-{(day.ToString().Length == 1 ? "0" + day : day + "")}";
}
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString LunarToSolar(string time)
{
//转阳历
bool rn = time.Contains("润");
time = time.Replace("润", "");
ChineseLunisolarCalendar cncld = new ChineseLunisolarCalendar();
int year = Convert.ToInt32(time.Split('-')[0]);
int month = Convert.ToInt32(time.Split('-')[1]);
int day = Convert.ToInt32(time.Split('-')[2]);
int flag = cncld.GetLeapMonth(year);
int monthbk = month;
if (flag > 0)
{
if ( month< flag)
{
if (!rn)
{
month = month - 1;
}
}
}
month += flag > 0 ? 1 : 0;
DateTime dtnl = cncld.ToDateTime(year, month, day, 0, 0, 0, 0);
return dtnl.ToString("yyyy-MM-dd");
}
}
CLR实现阴历阳历转换
于 2024-01-03 15:41:25 首次发布