Skip to content

Commit

Permalink
v1.0.1 优化性能;新增六曜、入梅出梅、获取农历日当天的时辰列表、时辰获取黄道黑道十二神。
Browse files Browse the repository at this point in the history
  • Loading branch information
6tail committed Jun 22, 2024
1 parent 924b065 commit 783e24e
Show file tree
Hide file tree
Showing 13 changed files with 400 additions and 29 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,10 @@

## [1.0.0] - 2024-06-17
1. 移植自tyme4j。

## [1.0.1] - 2024-06-22
1. 优化:性能。
2. 新增:六曜。
3. 新增:入梅出梅。
4. 新增:获取农历日当天的时辰列表。
5. 新增:时辰获取黄道黑道十二神。
43 changes: 43 additions & 0 deletions test/PlumRainDayTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using tyme.solar;

namespace test;

/// <summary>
/// 梅雨天测试
/// </summary>
public class PlumRainDayTest
{
[Fact]
public void Test0()
{
var d = SolarDay.FromYmd(2024, 6, 10).PlumRainDay;
Assert.Null(d);
}

[Fact]
public void Test1()
{
var d = SolarDay.FromYmd(2024, 6, 11).PlumRainDay;
Assert.Equal("入梅", d.GetName());
Assert.Equal("入梅", d.PlumRain.ToString());
Assert.Equal("入梅第1天", d.ToString());
}

[Fact]
public void Test2()
{
var d = SolarDay.FromYmd(2024, 7, 6).PlumRainDay;
Assert.Equal("出梅", d.GetName());
Assert.Equal("出梅", d.PlumRain.ToString());
Assert.Equal("出梅", d.ToString());
}

[Fact]
public void Test3()
{
var d = SolarDay.FromYmd(2024, 7, 5).PlumRainDay;
Assert.Equal("入梅", d.GetName());
Assert.Equal("入梅", d.PlumRain.ToString());
Assert.Equal("入梅第25天", d.ToString());
}
}
57 changes: 57 additions & 0 deletions test/SixStarTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using tyme.solar;

namespace test;

/// <summary>
/// 六曜测试
/// </summary>
public class SixStarTest
{
[Fact]
public void Test0()
{
Assert.Equal("佛灭", SolarDay.FromYmd(2020, 4, 23).GetLunarDay().SixStar.GetName());
}

[Fact]
public void Test1()
{
Assert.Equal("友引", SolarDay.FromYmd(2021, 1, 15).GetLunarDay().SixStar.GetName());
}

[Fact]
public void Test2()
{
Assert.Equal("先胜", SolarDay.FromYmd(2017, 1, 5).GetLunarDay().SixStar.GetName());
}

[Fact]
public void Test3()
{
Assert.Equal("友引", SolarDay.FromYmd(2020, 4, 10).GetLunarDay().SixStar.GetName());
}

[Fact]
public void Test4()
{
Assert.Equal("大安", SolarDay.FromYmd(2020, 6, 11).GetLunarDay().SixStar.GetName());
}

[Fact]
public void Test5()
{
Assert.Equal("先胜", SolarDay.FromYmd(2020, 6, 1).GetLunarDay().SixStar.GetName());
}

[Fact]
public void Test6()
{
Assert.Equal("先负", SolarDay.FromYmd(2020, 12, 8).GetLunarDay().SixStar.GetName());
}

[Fact]
public void Test8()
{
Assert.Equal("赤口", SolarDay.FromYmd(2020, 12, 11).GetLunarDay().SixStar.GetName());
}
}
60 changes: 60 additions & 0 deletions tyme/culture/plumrain/PlumRain.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
namespace tyme.culture.plumrain
{
/// <summary>
/// 梅雨
/// </summary>
public class PlumRain : LoopTyme
{
/// <summary>
/// 名称
/// </summary>
public static string[] Names =
{
"入梅", "出梅"
};

/// <summary>
/// 初始化
/// </summary>
/// <param name="index">索引值</param>
public PlumRain(int index) : base(Names, index)
{
}

/// <summary>
/// 初始化
/// </summary>
/// <param name="name">名称</param>
public PlumRain(string name) : base(Names, name)
{
}

/// <summary>
/// 初始化
/// </summary>
/// <param name="index">索引值</param>
public static PlumRain FromIndex(int index)
{
return new PlumRain(index);
}

/// <summary>
/// 初始化
/// </summary>
/// <param name="name">名称</param>
public static PlumRain FromName(string name)
{
return new PlumRain(name);
}

/// <summary>
/// 推移
/// </summary>
/// <param name="n">推移步数</param>
/// <returns>推移后的梅雨</returns>
public new PlumRain Next(int n)
{
return FromIndex(NextIndex(n));
}
}
}
31 changes: 31 additions & 0 deletions tyme/culture/plumrain/PlumRainDay.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
namespace tyme.culture.plumrain
{
/// <summary>
/// 梅雨天
/// </summary>
public class PlumRainDay : AbstractCultureDay
{
/// <summary>
/// 初始化
/// </summary>
/// <param name="plumRain">梅雨</param>
/// <param name="dayIndex">天索引</param>
public PlumRainDay(PlumRain plumRain, int dayIndex) : base(plumRain, dayIndex)
{
}

/// <summary>
/// 梅雨
/// </summary>
public PlumRain PlumRain => (PlumRain)culture;

/// <summary>
/// 完整描述
/// </summary>
/// <returns>完整描述</returns>
public override string ToString()
{
return PlumRain.Index == 0 ? base.ToString() : culture.GetName();
}
}
}
60 changes: 60 additions & 0 deletions tyme/culture/star/six/SixStar.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
namespace tyme.culture.star.six
{
/// <summary>
/// 六曜(孔明六曜星、小六壬)
/// </summary>
public class SixStar : LoopTyme
{
/// <summary>
/// 名称
/// </summary>
public static string[] Names =
{
"先胜", "友引", "先负", "佛灭", "大安", "赤口"
};

/// <summary>
/// 初始化
/// </summary>
/// <param name="index">索引值</param>
public SixStar(int index) : base(Names, index)
{
}

/// <summary>
/// 初始化
/// </summary>
/// <param name="name">名称</param>
public SixStar(string name) : base(Names, name)
{
}

/// <summary>
/// 初始化
/// </summary>
/// <param name="index">索引值</param>
public static SixStar FromIndex(int index)
{
return new SixStar(index);
}

/// <summary>
/// 初始化
/// </summary>
/// <param name="name">名称</param>
public static SixStar FromName(string name)
{
return new SixStar(name);
}

/// <summary>
/// 推移
/// </summary>
/// <param name="n">推移步数</param>
/// <returns>推移后的六曜</returns>
public new SixStar Next(int n)
{
return FromIndex(NextIndex(n));
}
}
}
10 changes: 10 additions & 0 deletions tyme/jd/JulianDay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -214,5 +214,15 @@ public SolarTime GetSolarTime()
/// 星期
/// </summary>
public Week Week => Week.FromIndex((int)(Day + 0.5) + 7000001);

/// <summary>
/// 儒略日相减
/// </summary>
/// <param name="target">儒略日</param>
/// <returns>差</returns>
public double Subtract(JulianDay target)
{
return Day - target.Day;
}
}
}
37 changes: 31 additions & 6 deletions tyme/lunar/LunarDay.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using tyme.culture;
using tyme.culture.fetus;
using tyme.culture.star.nine;
using tyme.culture.star.six;
using tyme.culture.star.twelve;
using tyme.culture.star.twentyeight;
using tyme.festival;
Expand Down Expand Up @@ -96,8 +98,8 @@ public override string ToString()
}

var d = Day + n;
var lm = Month;
var daysInMonth = lm.DayCount;
var m = Month;
var daysInMonth = m.DayCount;
var forward = n > 0;
var add = forward ? 1 : -1;
while (forward ? (d > daysInMonth) : (d <= 0))
Expand All @@ -107,15 +109,15 @@ public override string ToString()
d -= daysInMonth;
}

lm = lm.Next(add);
daysInMonth = lm.DayCount;
m = m.Next(add);
daysInMonth = m.DayCount;
if (!forward)
{
d += daysInMonth;
}
}

return FromYmd(lm.Year.Year, lm.MonthWithLeap, d);
return FromYmd(m.Year.Year, m.MonthWithLeap, d);
}

/// <summary>
Expand Down Expand Up @@ -214,7 +216,8 @@ public SixtyCycle MonthSixtyCycle
var year = solarDay.Month.Year.Year;
var term = solarDay.Term;
var index = term.Index - 3;
if (index < 0 && term.JulianDay.GetSolarDay().IsAfter(SolarTerm.FromIndex(year, 3).JulianDay.GetSolarDay()))
if (index < 0 && term.JulianDay.GetSolarDay()
.IsAfter(SolarTerm.FromIndex(year, 3).JulianDay.GetSolarDay()))
{
index += 24;
}
Expand Down Expand Up @@ -306,6 +309,11 @@ public NineStar NineStar
/// </summary>
public Phase Phase => Phase.FromIndex(Day - 1);

/// <summary>
/// 六曜
/// </summary>
public SixStar SixStar => SixStar.FromIndex((Month.Month + Day - 2) % 6);

/// <summary>
/// 公历日
/// </summary>
Expand All @@ -327,6 +335,23 @@ public SolarDay GetSolarDay()
/// </summary>
public LunarFestival Festival => LunarFestival.FromYmd(Month.Year.Year, Month.MonthWithLeap, Day);

/// <summary>
/// 当天的时辰列表
/// </summary>
public List<LunarHour> Hours
{
get
{
var l = new List<LunarHour> { LunarHour.FromYmdHms(Month.Year.Year, Month.Month, Day, 0, 0, 0) };
for (var i = 0; i < 24; i += 2)
{
l.Add(LunarHour.FromYmdHms(Month.Year.Year, Month.Month, Day, i + 1, 0, 0));
}

return l;
}
}

/// <summary>
/// 是否相等
/// </summary>
Expand Down
Loading

0 comments on commit 783e24e

Please sign in to comment.