waterbeside / lunisolar

Typescript农历库,支持阴历公历互转,支持各类黄历数据查询,如八字四柱、阴历、神煞宜忌、建除十二神、胎神占方、吉神方位、五行纳音等。支持自定义插件。
https://lunisolar.js.org
GNU General Public License v3.0
208 stars 21 forks source link

本库的节气推算精度不够,应该精确到分 #30

Open WeiJunFenYou opened 3 months ago

WeiJunFenYou commented 3 months ago

在readme看到作者写道:

节气是某一个时该点,而非某个时间段,但由于本库采用的转换数据只精确到天,所以本库的交节(更换八字月柱),也是以日为准。

这是不合理的。节气的判定是要根据黄道的角度,理论上精度可以无限高。实际应用中,精确到分即可。《紫金历》的节气精度就是如此,本库精确到分也是理所应当。

紫金山天文台

这里是官方发布的数据,只精确到了

只精确到日,容易导致时间靠近节气边界时,月柱和节气计算失准。

作者 #29 问题中,已经提到自己有了改进的打算。改进方案无非是如下2种,或2种的结合,不知作者将采取何种方案?

方案1:使用官方发布的精确到秒的时间,作为某年节气的起始点,后续和之前的节气,皆以此为原点,计算得出。即官方数据只使用一条作为计算依据、计算原点,其余皆由程序推算。

方案2:官方已发布的精确时间,则使用官方数据,官方未发布的,则交予程序推算。即使用官方发布的全部数据,官方未发布的数据,才自己推算。

我个人比较倾向于第一种方案。如果自己推算的结果,和官方发布的结果,误差仅仅几秒钟,则无伤大雅。只要输入的时间不要恰好落入这个误差地带,就不会有什么问题。

官方数据精确到分,自己推算,则需要和官方一致。本人倒是挺希望把精确度提高到秒的,只是写了一半,查了数据,发现官方数据也只是精确到分,我们也只能追随官方了,遂把文字改成精确到分。毕竟我们没有官方高水平的测量手段。

WeiJunFenYou commented 3 months ago

另外还有一个建议,在命名上,本库采用英文翻译天干地支等等概念。把“天干”命名成“stem”,“地支”命名成“branch”,或许是为了遵守编程规范,不过编程规范在这里是需要打破的。不如使用汉语拼音。传统算命是中国人的东西,很多概念都是中国独有的概念,没有办法意译,只有音译。既然没有对应的英文翻译,那就不要翻译了,洋人也没有系统性的引进中国传统算命,他们对此也没有权威的英文命名。勉强翻译,首先让中国程序员使用不便,而这个库的大部分用户,都是中国人。二来若有洋人程序员,也会让他们产生误解。 天干地支和树枝根茎可没什么关系。

洋人若学习八字算命,则首先要学习对应汉字,是他们要顺着我们的习惯,不是我们顺着他们的习惯。所以这个库,在变量命名上根本就不用考虑国际化。用我们中国人最舒服的方式,就是最好的代码。

既然使用了汉语拼音,就可以把所有的术语都改成汉语拼音,以保持一致。遇到拼音冲突的,如“食神”和“十神”,就为冲突的拼音单独命名。如把“十神”命名成“ShiShen10”。然后在readme中将这些为了解决拼音冲突的命名单独列出,以方便用户理解使用。或者让“食神”和“十神”列在不同的代码块中,让相同的拼音可以不冲突。

虽然软件有国际化模块,这些名词总归是要翻译的,但这些翻译准不准确?如果翻译需要改动,国际化模块的翻译倒是好改,然而代码层面的翻译也要变动。这也是我不支持在代码中使用英文的原因。

waterbeside commented 3 months ago

在readme看到作者写道:

节气是某一个时该点,而非某个时间段,但由于本库采用的转换数据只精确到天,所以本库的交节(更换八字月柱),也是以日为准。

这是不合理的。节气的判定是要根据黄道的角度,理论上精度可以无限高。实际应用中,精确到分即可。《紫金历》的节气精度就是如此,本库精确到分也是理所应当。

紫金山天文台

这里是官方发布的数据,只精确到了

只精确到日,容易导致时间靠近节气边界时,月柱和节气计算失准。

作者 #29 问题中,已经提到自己有了改进的打算。改进方案无非是如下2种,或2种的结合,不知作者将采取何种方案?

方案1:使用官方发布的精确到秒的时间,作为某年节气的起始点,后续和之前的节气,皆以此为原点,计算得出。即官方数据只使用一条作为计算依据、计算原点,其余皆由程序推算。

方案2:官方已发布的精确时间,则使用官方数据,官方未发布的,则交予程序推算。即使用官方发布的全部数据,官方未发布的数据,才自己推算。

我个人比较倾向于第一种方案。如果自己推算的结果,和官方发布的结果,误差仅仅几秒钟,则无伤大雅。只要输入的时间不要恰好落入这个误差地带,就不会有什么问题。

官方数据精确到分,自己推算,则需要和官方一致。本人倒是挺希望把精确度提高到秒的,只是写了一半,查了数据,发现官方数据也只是精确到分,我们也只能追随官方了,遂把文字改成精确到分。毕竟我们没有官方高水平的测量手段。

十分感谢提出问题和意见,


首先回答一下,为什么lunisolar现行版本换节只支持到按日,


当然,只能查两百年,而且节气没精确到时刻,也不是我最终想要的。 所以我最开始设计项目的时候,就做了插件功能,方便日后扩展各类术数据能。


ps, 为此,本人也十分抱歉。支持精确的交节时间的八字插件,其实上年已经在做了,只是因为工作时间关系,进度一直被拖着。后续我会尽快抽时间把功能做出来,谢谢。