Starainrt / astro

自用天文算法,公历农历转换、八大行星位置、日出日落月出月落时间、节气物候时间等
Apache License 2.0
121 stars 25 forks source link

计算月出时刻问题 #2

Closed clfeng66 closed 3 years ago

clfeng66 commented 3 years ago

感谢分享,在测试过程,发现输入当前时间,月出时刻返回:-4713-12-29 12:00:00 +0805 LMT ERROR:月亮已在(昨日/明日)(升起/降下)。

Starainrt commented 3 years ago

存在这样的场景:某地月亮在昨天23时59分升起,今日12时落下,下次升起时间为明日0时50分。 这样的话,今日月亮实际上是没有升起时间的,故会报这样的错。

Starainrt commented 3 years ago

不过因为时区的问题,非上述情景下的确会有时区转换失败导致出现这个错误,目前已经修复。

clfeng66 commented 3 years ago

感谢, 刚做了更新,拿2021年3月4日和2021年3月5日举例,我发现月出时间都会报错, 我拿其他方数据对照今天的月出时间为23:33,这里是否还是存在问题?

Starainrt commented 3 years ago

能否提供下传入的经纬度和时区?我复现下。

clfeng66 commented 3 years ago

就是在提供的范例测试,经纬度默认,只改了时间, cst := time.FixedZone("CST", 8*3600) date := time.Date(2021, 03, 4, 2, 40, 30, 8, cst) fmt.Println(moon.RiseTime(date, 117, 40, true)) //东经117北纬40度月出时刻 输出:-4713-12-29 12:05:43 +0805 LMT ERROR:月亮已在(昨日/明日)(升起/降下)

Starainrt commented 3 years ago

感谢,算法中把一个减号写成了加号导致的,已经修复了。

cst := time.FixedZone("CST", 83600) date := time.Date(2021, 3, 4, 8, 8, 8, 8, cst) //指定2021年3月4日8时8分8秒 fmt.Println(moon.RiseTime(date.Add(time.Hour-24), 117, 40, true)) //东经117北纬40度月出时刻 fmt.Println(moon.RiseTime(date, 117, 40, true)) //东经117北纬40度月出时刻 fmt.Println(moon.RiseTime(date.Add(time.Hour24), 117, 40, true)) //东经117北纬40度月出时刻 fmt.Println(moon.RiseTime(date.Add(time.Hour48), 117, 40, true)) //东经117北纬40度月出时刻

分别计算3号、4号、5号、6号的月出数据:

2021-03-03 22:46:21.281340122 +0800 CST -4713-12-29 12:00:00 +0800 CST ERROR:月亮已在(昨日/明日)(升起/降下) 2021-03-05 00:00:13.28305006 +0800 CST 2021-03-06 01:13:01.357567012 +0800 CST

与其他天文软件的结果比对了,这次是ok的。今天(4号)月亮是在5号的零点升起。