6tail / tyme4j

Tyme是一个非常强大的日历工具库,可以看作 Lunar 的升级版,拥有更优的设计和扩展性,支持公历和农历、星座、干支、生肖、节气、法定假日等。
https://6tail.cn/tyme.html
MIT License
80 stars 23 forks source link

关于 tyme4j 库中 `lunarHour.eightChar` 方法的天干地支计算错误反馈 #7

Closed afterow closed 1 month ago

afterow commented 1 month ago

主题:关于 tyme4j 库中 lunarHour.eightChar 方法的天干地支计算错误反馈

    尊敬的6tail先生

    您好!首先感谢您创建了tyme4j这样一个有用的库,它为处理农历和八字信息提供了极大的便利。然而,在使用lunarHour.eightChar方法查询特定农历时辰的八字信息时,我遇到了一些问题,希望您能帮忙查看并解决。

问题描述

我发现lunarHour.eightChar方法返回的天干地支组合与我所知的传统天干地支计算规则不符。在尝试查询2024年09月21日21时16分43秒的农历时辰时,返回的八字信息与通过其他可靠来源(如传统农历算法或专业软件)计算得到的结果不一致。

复现步骤

  1. 调用lunarHour.eightChar方法,并传入代表特定农历时辰的参数(例如,2024年09月21日21时16分43秒)。
  2. 记录下函数返回的天干地支信息。
  3. 使用其他方法(如手动计算或使用其他农历算法库)验证相同农历时辰的天干地支信息。
  4. 对比两者结果,发现不一致。

期望结果

对于2024年09月21日21时16分43秒的农历时辰,期望的八字信息应为“甲辰年 癸酉月 戊子日 癸亥时”。

实际结果

然而,lunarHour.eightChar方法实际返回的天干地支信息是“甲辰 甲戌 庚申 丁亥”,这与期望的结果不符,导致计算结果错误。

我的相关代码

val now = LocalDateTime.of(2024, 9, 21, 21, 16, 43)
val lunarHour = LunarHour.fromLocalDateTime(now) // 假设这是正确的方法调用,根据实际情况可能需要调整
val eightChar = lunarHour.eightChar.toString().replace(" ", "")

恢复建议

    我猜测这个问题可能与农历月份或时辰的转换逻辑有关,在你项目的相关代码src/main/java/com/tyme/eightchar/EightChar.java找不到可以修改的地方,可能bug🐛在农历的处理是,我的Java水平比较菜解决不了,希望你有空恢复下,谢谢!!!

6tail commented 1 month ago

LunarHour为农历时辰,实例化参数为农历年、农历月(闰月用负数)、农历日、时、分、秒,而不是公历。如果你要使用公历时刻转农历时辰,需要使用SolarTime,转换为LunarHour,再得到八字。

afterow commented 1 month ago

LunarHour为农历时辰,实例化参数为农历年、农历月(闰月用负数)、农历日、时、分、秒,而不是公历。如果你要使用公历时刻转农历时辰,需要使用SolarTime,转换为LunarHour,再得到八字。

你的SolarTime的逻辑我看不懂,能否提供一个北京时间转换成LunarHour或者八字(eightChar)Java代码

6tail commented 1 month ago

单元测试用例里有啊,EightCharTest.java

` @Test

public void test8() {

// 北京时间2005年12月23日,08:37:00转八字
EightChar eightChar = SolarTime.fromYmdHms(2005, 12, 23, 8, 37, 0).getLunarHour().getEightChar();

Assert.assertEquals("乙酉", eightChar.getYear().getName());

Assert.assertEquals("戊子", eightChar.getMonth().getName());

Assert.assertEquals("辛巳", eightChar.getDay().getName());

Assert.assertEquals("壬辰", eightChar.getHour().getName());

} `

afterow commented 1 month ago

好的谢谢,解决了,看来我得换个好的ide了