欢迎光临散文网 会员登陆 & 注册

中华历法需要大家的帮助「天文学,物理学,计算机学」

2023-07-20 13:55 作者:南域ani  | 我要投稿

我花了一两个月的时间,研究国内的各种历法,发现了彝族人民使用的历法很可能创立于上古时代。

以下是彝族历法实例,出于可编程考虑,我将彝族过年日纳入1月份范围。对于十二月历法,首先介绍二十四节气的概念。

定义「基于天文学」:当北斗七星的斗柄指向某一个方向,同时对应的天体也出现在某一个方向的时候,这一天的物候叫做节气。例如立春的定义为:当北斗七星的斗柄指向东方,木星也出现在东方的时候,这一天叫做立春。二十四节气分为节气和中气,比如立春是第一个,序号为奇数,为节气,雨水是第二个,序号为偶数,为中气。

  1. 彝族十月历法 平年365天,闰年366天,4年一闰,一年10个月,平年1月份41天,闰年1月份42天,其它月份36天。

  2. 彝族十八月历法 平年365天,闰年366天,4年一闰,一年18个月,平年1月份25天,闰年1月份26天,其它月份20天。

  3. 彝族十二月历法 平年365天,闰年366天,4年一闰,一年12个月,平年1月份35天,闰年1月份36天。每一个月以节气为当月第一天。

    关于历法的编程实现,我已经有了Java框架,但是目前手中没有合适的编程工具,编程极其困难。目前框架如下:

    彝族十月历法:

    纪元类 负责记录皇帝年号,比如永乐年,嘉庆年,最好用enumeration实现,以保证线程安全。

    年表类 负责日期计算,比如判断这一年是否为闰年,以及这一年有多少天,将永乐3年转换为递推年(1415年)等。

    日历类 负责日期存储 比如2023年7月1日,每一个方法都尽量返回新的实例,以保证线程安全。

编程实现思路:以Unix时间戳开始时间为一个参照日期,比如在西洋历法当中的1970年1月2日,要转换到彝族历法当中,只需要计算其和1970年1月1日相差的日期数量,再根据这个数量差值在彝族历法当中调节到这一天即可。注意日期没有第0年,第0月的概念!一定要剔除0!re

目前需要实现的历法:

  1. 彝族三种历法「纪年,年表,日历」(十月历法,十八月历法,十二月历法)。需要用到的Java类 java.time.chrono.Era, java.time.chrono.AbstractChronology, java.time.chrono.LocalDate

  2. 传统干支历法「纪年,年表,日历,时间」(十二月历法)java.time.chrono.Era, java.time.chrono.AbstractChronology, java.time.chrono.LocalDate, java.time.chrono.LocalDateTime

  3. 农历历法「纪年,年表,日历」(十月历法+十二月历法,日编号和干支历法日编号一致)java.time.chrono.Era, java.time.chrono.AbstractChronology, java.time.chrono.LocalDate, java.time.chrono.LocalDateTime

实现历法的重难点-纪月

  1. 大月和小月

  2. 月份天干和地支

  3. 闰月

把太阳系模拟为一个坐标系,以各大行星重合的那一天为历法起点,地球处于y轴负半轴,用作历法计算。当木星的坐标在地球坐标的3点钟方向,北斗七星斗柄指向东方,我们称这一天在地球上为立春。很可惜水星,金星,地球,火星,木星,土星这六颗行星的运行轨道是椭圆形,行星在每个点的运行速度是不一样的,会影响到和地球相对角度的确定。

大致思路为:把所有行星置于y轴负半轴,比如要计算第7天,那么就分别根据行星的每日速度和轨迹计算出第7天的位置,再计算相对于地球的位置。


中华历法需要大家的帮助「天文学,物理学,计算机学」的评论 (共 条)

分享到微博请遵守国家法律