- 积分
- 69
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
今天抽了一点时间,写了以下计算节气的算法,2005年的节气均验证过,正确无误
大家顶上去,直到llhn大侠关注
/// <summary>
/// C#源代码:根据阳历日期,计算节气,返回节气名称
/// </summary>
/// <param name="day">阳历日期</param>
/// <returns>节气名称</returns>
public static string GetSolarTerm(System.DateTime day)
{
//节气名称数组
string[] TermName = new string[]
{
"小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至",
"小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"
};
//各节气和小寒相差的分钟数(因为只有分钟的数据,所以仅精确到分钟)
int[] TermOffsetInMinute = new int[]
{
0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,
263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758
};
//一个节气年的毫秒长度
double TermYearLengthInMS = 31556925974.7;
//基准节气时刻(1900年小寒)
System.DateTime BasicTerm = System.DateTime.Parse("1900-01-06 02:05:00");
//计算今年小寒所在的日期
System.DateTime CurrentTerm0 = BasicTerm.AddMilliseconds( TermYearLengthInMS * ( day.Year - 1900 ) );
//计算当前日期和小寒日期相差的分钟数
System.TimeSpan dayMinute = day - CurrentTerm0;
double dayMinuteFrom = dayMinute.TotalMinutes;
double dayMinuteTo = dayMinuteFrom + 60 * 24;
//遍历每个节气,找出在当前日期24小时范围内的节气
for (int i=0;i<TermName.Length;i++)
{
if ( dayMinuteFrom <= TermOffsetInMinute[i] && dayMinuteTo > TermOffsetInMinute[i] )
{
//找到节气,返回节气名称
return TermName[i];
}
}
//找不到节气,说明当前日期并非节气日
return "";
} |
|