mirror of
https://gitee.com/6tail/lunar-csharp.git
synced 2025-12-06 10:19:07 +08:00
@@ -120,19 +120,12 @@ namespace Lunar
|
||||
get
|
||||
{
|
||||
var l = new List<FotoFestival>();
|
||||
try
|
||||
{
|
||||
l.AddRange(FotoUtil.FESTIVAL[Math.Abs(Month) + "-" + Day]);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
|
||||
if (FotoUtil.FESTIVAL.TryGetValue(Math.Abs(Month) + "-" + Day, out var festivals))
|
||||
l.AddRange(festivals);
|
||||
return l;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 纪念日
|
||||
/// </summary>
|
||||
@@ -141,15 +134,8 @@ namespace Lunar
|
||||
get
|
||||
{
|
||||
var l = new List<string>();
|
||||
try
|
||||
{
|
||||
var fs = FotoUtil.OTHER_FESTIVAL[$"{Month}-{Day}"];
|
||||
l.AddRange(fs);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (FotoUtil.OTHER_FESTIVAL.TryGetValue($"{Month}-{Day}", out var festivals))
|
||||
l.AddRange(festivals);
|
||||
return l;
|
||||
}
|
||||
}
|
||||
@@ -192,10 +178,10 @@ namespace Lunar
|
||||
case 30:
|
||||
return true;
|
||||
case 28:
|
||||
{
|
||||
var m = LunarMonth.FromYm(Lunar.Year, Month);
|
||||
return null != m && 30 != m.DayCount;
|
||||
}
|
||||
{
|
||||
var m = LunarMonth.FromYm(Lunar.Year, Month);
|
||||
return null != m && 30 != m.DayCount;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -205,7 +191,7 @@ namespace Lunar
|
||||
/// <summary>
|
||||
/// 十斋日
|
||||
/// </summary>
|
||||
public bool DayZhaiTen => Day == 1 || Day == 8 || Day == 14 || Day == 15 || Day == 18 || Day == 23 || Day == 24 || Day == 28 || Day == 29 || Day == 30;
|
||||
public bool DayZhaiTen => Day == 1 || Day == 8 || Day == 14 || Day == 15 || Day == 18 || Day == 23 || Day == 24 || Day == 28 || Day == 29 || Day == 30;
|
||||
|
||||
/// <summary>
|
||||
/// 观音斋日
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace Lunar
|
||||
public EightChar.EightChar EightChar => _eightChar ?? (_eightChar = new EightChar.EightChar(this));
|
||||
|
||||
private Foto _foto;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 佛历
|
||||
/// </summary>
|
||||
@@ -184,7 +184,7 @@ namespace Lunar
|
||||
/// <summary>
|
||||
/// 默认使用当前日期初始化
|
||||
/// </summary>
|
||||
public Lunar(): this(DateTime.Now)
|
||||
public Lunar() : this(DateTime.Now)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -222,7 +222,8 @@ namespace Lunar
|
||||
Second = second;
|
||||
var noon = Solar.FromJulianDay(m.FirstJulianDay + lunarDay - 1);
|
||||
Solar = Solar.FromYmdHms(noon.Year, noon.Month, noon.Day, hour, minute, second);
|
||||
if (noon.Year != lunarYear) {
|
||||
if (noon.Year != lunarYear)
|
||||
{
|
||||
y = LunarYear.FromYear(noon.Year);
|
||||
}
|
||||
Compute(y);
|
||||
@@ -234,7 +235,7 @@ namespace Lunar
|
||||
/// <param name="solar">阳历</param>
|
||||
public Lunar(Solar solar)
|
||||
{
|
||||
var ly = LunarYear.FromYear(solar.Year);
|
||||
var ly = LunarYear.FromYear(solar.Year);
|
||||
foreach (var m in ly.Months)
|
||||
{
|
||||
var days = solar.Subtract(Solar.FromJulianDay(m.FirstJulianDay));
|
||||
@@ -252,12 +253,12 @@ namespace Lunar
|
||||
Solar = solar;
|
||||
Compute(ly);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 通过阳历日期初始化
|
||||
/// </summary>
|
||||
/// <param name="date">阳历日期</param>
|
||||
public Lunar(DateTime date): this(Solar.FromDate(date))
|
||||
public Lunar(DateTime date) : this(Solar.FromDate(date))
|
||||
{
|
||||
}
|
||||
|
||||
@@ -447,7 +448,7 @@ namespace Lunar
|
||||
TimeZhiIndex = LunarUtil.GetTimeZhiIndex(hm);
|
||||
TimeGanIndex = (DayGanIndexExact % 5 * 2 + TimeZhiIndex) % 10;
|
||||
}
|
||||
|
||||
|
||||
private void ComputeWeek()
|
||||
{
|
||||
WeekIndex = Solar.Week;
|
||||
@@ -526,7 +527,7 @@ namespace Lunar
|
||||
/// <summary>
|
||||
/// 日天干(八字流派2,晚子时日柱算当天),如甲
|
||||
/// </summary>
|
||||
public string DayGanExact2 => LunarUtil.GAN[DayGanIndexExact2 + 1];
|
||||
public string DayGanExact2 => LunarUtil.GAN[DayGanIndexExact2 + 1];
|
||||
|
||||
/// <summary>
|
||||
/// 年地支(以正月初一作为新年的开始),如亥
|
||||
@@ -779,16 +780,11 @@ namespace Lunar
|
||||
get
|
||||
{
|
||||
var l = new List<string>();
|
||||
try
|
||||
{
|
||||
l.Add(LunarUtil.FESTIVAL[$"{Month}-{Day}"]);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (LunarUtil.FESTIVAL.TryGetValue($"{Month}-{Day}", out var festival))
|
||||
l.Add(festival);
|
||||
|
||||
if (Math.Abs(Month) == 12 && Day >= 29 && Year != Next(1).Year) {
|
||||
if (Math.Abs(Month) == 12 && Day >= 29 && Year != Next(1).Year)
|
||||
{
|
||||
l.Add("除夕");
|
||||
}
|
||||
return l;
|
||||
@@ -803,14 +799,8 @@ namespace Lunar
|
||||
get
|
||||
{
|
||||
var l = new List<string>();
|
||||
try
|
||||
{
|
||||
l.AddRange(LunarUtil.OTHER_FESTIVAL[$"{Month}-{Day}"]);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (LunarUtil.OTHER_FESTIVAL.TryGetValue($"{Month}-{Day}", out var festivals))
|
||||
l.AddRange(festivals);
|
||||
|
||||
var solarYmd = Solar.Ymd;
|
||||
var jq = JieQiTable["清明"];
|
||||
@@ -951,7 +941,7 @@ namespace Lunar
|
||||
/// 年太岁方位(流派2新年以立春零点起算)
|
||||
/// </summary>
|
||||
public string YearPositionTaiSui => GetYearPositionTaiSui();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 年太岁方位描述(流派2新年以立春零点起算),如东北
|
||||
/// </summary>
|
||||
@@ -1410,9 +1400,12 @@ namespace Lunar
|
||||
var indexExact = LunarUtil.GetJiaZiIndex(yearInGanZhi) + 1;
|
||||
var index = LunarUtil.GetJiaZiIndex(YearInGanZhi) + 1;
|
||||
var yearOffset = indexExact - index;
|
||||
if (yearOffset > 1) {
|
||||
if (yearOffset > 1)
|
||||
{
|
||||
yearOffset -= 60;
|
||||
} else if (yearOffset < -1) {
|
||||
}
|
||||
else if (yearOffset < -1)
|
||||
{
|
||||
yearOffset += 60;
|
||||
}
|
||||
var yuan = (Year + yearOffset + 2696) / 60 % 3;
|
||||
@@ -2072,7 +2065,7 @@ namespace Lunar
|
||||
}
|
||||
|
||||
var end = new Solar(start.Year, start.Month, start.Day).Next(81);
|
||||
|
||||
|
||||
if (current.IsBefore(start) || !current.IsBefore(end))
|
||||
{
|
||||
return null;
|
||||
@@ -2089,7 +2082,7 @@ namespace Lunar
|
||||
public Fu Fu
|
||||
{
|
||||
get
|
||||
{
|
||||
{
|
||||
var current = new Solar(Solar.Year, Solar.Month, Solar.Day);
|
||||
var xiaZhi = JieQiTable["夏至"];
|
||||
var liQiu = JieQiTable["立秋"];
|
||||
@@ -2161,7 +2154,8 @@ namespace Lunar
|
||||
}
|
||||
}
|
||||
var index = Solar.Subtract(jieQi.Solar) / 5;
|
||||
if (index > 2) {
|
||||
if (index > 2)
|
||||
{
|
||||
index = 2;
|
||||
}
|
||||
return LunarUtil.WU_HOU[(offset * 3 + index) % LunarUtil.WU_HOU.Length];
|
||||
@@ -2195,14 +2189,7 @@ namespace Lunar
|
||||
{
|
||||
var gan = LunarUtil.LU[DayGan];
|
||||
string zhi = null;
|
||||
try
|
||||
{
|
||||
zhi = LunarUtil.LU[DayZhi];
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
LunarUtil.LU.TryGetValue(DayZhi, out zhi);
|
||||
|
||||
var lu = $"{gan}命互禄";
|
||||
if (null != zhi)
|
||||
@@ -2225,7 +2212,7 @@ namespace Lunar
|
||||
{
|
||||
get
|
||||
{
|
||||
var l = new List<LunarTime> {new LunarTime(Year, Month, Day, 0, 0, 0)};
|
||||
var l = new List<LunarTime> { new LunarTime(Year, Month, Day, 0, 0, 0) };
|
||||
for (var i = 0; i < 12; i++)
|
||||
{
|
||||
l.Add(new LunarTime(Year, Month, Day, (i + 1) * 2 - 1, 0, 0));
|
||||
|
||||
144
lunar/Solar.cs
144
lunar/Solar.cs
@@ -50,7 +50,7 @@ namespace Lunar
|
||||
/// <summary>
|
||||
/// 默认使用当前日期初始化
|
||||
/// </summary>
|
||||
public Solar(): this(DateTime.Now)
|
||||
public Solar() : this(DateTime.Now)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ namespace Lunar
|
||||
/// 通过日期初始化
|
||||
/// </summary>
|
||||
/// <param name="date">日期</param>
|
||||
public Solar(DateTime date): this(date.Year, date.Month, date.Day, date.Hour, date.Minute,date.Second)
|
||||
public Solar(DateTime date) : this(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -188,9 +188,9 @@ namespace Lunar
|
||||
/// <param name="minute">分钟,0到59</param>
|
||||
/// <param name="second">秒钟,0到59</param>
|
||||
/// <returns>阳历</returns>
|
||||
public static Solar FromYmdHms(int year, int month, int day, int hour = 0, int minute = 0,int second = 0)
|
||||
public static Solar FromYmdHms(int year, int month, int day, int hour = 0, int minute = 0, int second = 0)
|
||||
{
|
||||
return new Solar(year, month, day, hour, minute,second);
|
||||
return new Solar(year, month, day, hour, minute, second);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -257,7 +257,7 @@ namespace Lunar
|
||||
int[] hours = { h };
|
||||
if (0 == h && 2 == sect)
|
||||
{
|
||||
hours = new [] { 0, 23 };
|
||||
hours = new[] { 0, 23 };
|
||||
}
|
||||
|
||||
var startYear = baseYear - 1;
|
||||
@@ -340,27 +340,48 @@ namespace Lunar
|
||||
{
|
||||
var index = 11;
|
||||
var y = Month * 100 + Day;
|
||||
if (y >= 321 && y <= 419) {
|
||||
if (y >= 321 && y <= 419)
|
||||
{
|
||||
index = 0;
|
||||
} else if (y >= 420 && y <= 520) {
|
||||
}
|
||||
else if (y >= 420 && y <= 520)
|
||||
{
|
||||
index = 1;
|
||||
} else if (y >= 521 && y <= 621) {
|
||||
}
|
||||
else if (y >= 521 && y <= 621)
|
||||
{
|
||||
index = 2;
|
||||
} else if (y >= 622 && y <= 722) {
|
||||
}
|
||||
else if (y >= 622 && y <= 722)
|
||||
{
|
||||
index = 3;
|
||||
} else if (y >= 723 && y <= 822) {
|
||||
}
|
||||
else if (y >= 723 && y <= 822)
|
||||
{
|
||||
index = 4;
|
||||
} else if (y >= 823 && y <= 922) {
|
||||
}
|
||||
else if (y >= 823 && y <= 922)
|
||||
{
|
||||
index = 5;
|
||||
} else if (y >= 923 && y <= 1023) {
|
||||
}
|
||||
else if (y >= 923 && y <= 1023)
|
||||
{
|
||||
index = 6;
|
||||
} else if (y >= 1024 && y <= 1122) {
|
||||
}
|
||||
else if (y >= 1024 && y <= 1122)
|
||||
{
|
||||
index = 7;
|
||||
} else if (y >= 1123 && y <= 1221) {
|
||||
}
|
||||
else if (y >= 1123 && y <= 1221)
|
||||
{
|
||||
index = 8;
|
||||
} else if (y >= 1222 || y <= 119) {
|
||||
}
|
||||
else if (y >= 1222 || y <= 119)
|
||||
{
|
||||
index = 9;
|
||||
} else if (y <= 218) {
|
||||
}
|
||||
else if (y <= 218)
|
||||
{
|
||||
index = 10;
|
||||
}
|
||||
return SolarUtil.XING_ZUO[index];
|
||||
@@ -376,36 +397,18 @@ namespace Lunar
|
||||
{
|
||||
var l = new List<string>();
|
||||
//获取几月几日对应的节日
|
||||
try
|
||||
{
|
||||
l.Add(SolarUtil.FESTIVAL[Month + "-" + Day]);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (SolarUtil.FESTIVAL.TryGetValue(Month + "-" + Day, out var festival))
|
||||
l.Add(festival);
|
||||
|
||||
//计算几月第几个星期几对应的节日
|
||||
var weeks = (int)Math.Ceiling(Day / 7D);
|
||||
//星期几,0代表星期天
|
||||
try
|
||||
{
|
||||
l.Add(SolarUtil.WEEK_FESTIVAL[Month + "-" + weeks + "-" + Week]);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (SolarUtil.WEEK_FESTIVAL.TryGetValue(Month + "-" + weeks + "-" + Week, out var festival2))
|
||||
l.Add(festival2);
|
||||
|
||||
if (Day + 7 <= SolarUtil.GetDaysOfMonth(Year, Month)) return l;
|
||||
try
|
||||
{
|
||||
l.Add(SolarUtil.WEEK_FESTIVAL[Month + "-0-" + Week]);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (SolarUtil.WEEK_FESTIVAL.TryGetValue(Month + "-0-" + Week, out var festival3))
|
||||
l.Add(festival3);
|
||||
|
||||
return l;
|
||||
}
|
||||
@@ -419,15 +422,8 @@ namespace Lunar
|
||||
get
|
||||
{
|
||||
var l = new List<string>();
|
||||
try
|
||||
{
|
||||
var fs = SolarUtil.OTHER_FESTIVAL[Month + "-" + Day];
|
||||
l.AddRange(fs);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (SolarUtil.OTHER_FESTIVAL.TryGetValue(Month + "-" + Day, out var festivals))
|
||||
l.AddRange(festivals);
|
||||
return l;
|
||||
}
|
||||
}
|
||||
@@ -524,7 +520,7 @@ namespace Lunar
|
||||
{
|
||||
return SolarUtil.GetDaysBetween(solar.Year, solar.Month, solar.Day, Year, Month, Day);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 阳历日期相减,获得相差分钟数
|
||||
/// </summary>
|
||||
@@ -564,11 +560,12 @@ namespace Lunar
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (Month < solar.Month)
|
||||
if (Month < solar.Month)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (Day > solar.Day) {
|
||||
if (Day > solar.Day)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (Day < solar.Day)
|
||||
@@ -613,7 +610,7 @@ namespace Lunar
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (Month < solar.Month)
|
||||
if (Month < solar.Month)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -637,7 +634,7 @@ namespace Lunar
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (Minute < solar.Minute)
|
||||
if (Minute < solar.Minute)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -724,21 +721,25 @@ namespace Lunar
|
||||
{
|
||||
d += days;
|
||||
var daysInMonth = SolarUtil.GetDaysOfMonth(y, m);
|
||||
while (d > daysInMonth) {
|
||||
while (d > daysInMonth)
|
||||
{
|
||||
d -= daysInMonth;
|
||||
m++;
|
||||
if (m > 12) {
|
||||
if (m > 12)
|
||||
{
|
||||
m = 1;
|
||||
y++;
|
||||
}
|
||||
daysInMonth = SolarUtil.GetDaysOfMonth(y, m);
|
||||
}
|
||||
} else if (days < 0)
|
||||
}
|
||||
else if (days < 0)
|
||||
{
|
||||
while (d + days <= 0)
|
||||
{
|
||||
m--;
|
||||
if (m < 1) {
|
||||
if (m < 1)
|
||||
{
|
||||
m = 12;
|
||||
y--;
|
||||
}
|
||||
@@ -748,7 +749,8 @@ namespace Lunar
|
||||
}
|
||||
if (1582 == y && 10 == m)
|
||||
{
|
||||
if (d > 4) {
|
||||
if (d > 4)
|
||||
{
|
||||
d += 10;
|
||||
}
|
||||
}
|
||||
@@ -763,7 +765,7 @@ namespace Lunar
|
||||
/// <returns>阳历日期</returns>
|
||||
public Solar Next(int days, bool onlyWorkday = false)
|
||||
{
|
||||
if(!onlyWorkday)
|
||||
if (!onlyWorkday)
|
||||
{
|
||||
return NextDay(days);
|
||||
}
|
||||
@@ -780,10 +782,12 @@ namespace Lunar
|
||||
if (null == holiday)
|
||||
{
|
||||
var week = solar.Week;
|
||||
if (0 == week || 6 == week) {
|
||||
if (0 == week || 6 == week)
|
||||
{
|
||||
work = false;
|
||||
}
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
work = holiday.Work;
|
||||
}
|
||||
@@ -848,19 +852,25 @@ namespace Lunar
|
||||
}
|
||||
|
||||
// 清明
|
||||
if ("清明".Equals(Lunar.JieQi)) {
|
||||
if ("清明".Equals(Lunar.JieQi))
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
var holiday = HolidayUtil.GetHoliday(Year, Month, Day);
|
||||
if (null != holiday) {
|
||||
if (null != holiday)
|
||||
{
|
||||
// 法定假日非上班
|
||||
if (!holiday.Work) {
|
||||
if (!holiday.Work)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// 周末
|
||||
var week = Week;
|
||||
if (week == 6 || week == 0) {
|
||||
if (week == 6 || week == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
30
lunar/Tao.cs
30
lunar/Tao.cs
@@ -109,14 +109,8 @@ namespace Lunar
|
||||
get
|
||||
{
|
||||
var l = new List<TaoFestival>();
|
||||
try
|
||||
{
|
||||
l.AddRange(TaoUtil.FESTIVAL[Month + "-" + Day]);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (TaoUtil.FESTIVAL.TryGetValue(Month + "-" + Day, out var festivals))
|
||||
l.AddRange(festivals);
|
||||
|
||||
var jq = Lunar.JieQi;
|
||||
switch (jq)
|
||||
@@ -130,24 +124,12 @@ namespace Lunar
|
||||
}
|
||||
|
||||
// 八节日
|
||||
try
|
||||
{
|
||||
l.Add(new TaoFestival(TaoUtil.BA_JIE[jq]));
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (TaoUtil.BA_JIE.TryGetValue(jq, out var bj))
|
||||
l.Add(new TaoFestival(bj));
|
||||
|
||||
// 八会日
|
||||
try
|
||||
{
|
||||
l.Add(new TaoFestival(TaoUtil.BA_HUI[Lunar.DayInGanZhi]));
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
if (TaoUtil.BA_HUI.TryGetValue(Lunar.DayInGanZhi, out var bh))
|
||||
l.Add(new TaoFestival(bh));
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user