10

有哪些算法或公式可用于计算分点和至点?几年前我找到了其中一个并实施了它,但精度不是很好:一天中的时间似乎假定为 00:00、06:00、12:00 和 18:00 UTC,具体取决于哪个春分或计算至日。维基百科将这些计算结果精确到分钟,因此必须有更精确的结果。我最喜欢的编程语言的库也出现在那些硬编码的时代,所以我假设它们使用的算法与我实现的算法相同或相似。

我也曾经尝试使用一个库,该库提供了太阳经度,并在 0、90、180 和 270 度的确切时刻执行了一个搜索程序来归零;这一直有效,但与 Wikipedia 中的时间不一致,所以我认为这种方法有问题。然而,我惊喜地发现迈蒙尼德(中世纪的犹太学者)在一千年前使用完全相同的想法提出了一种算法。

4

4 回答 4

3

(复杂!)基础公式和算法的一个重要来源是Jean Meeus 的Astronomical Algorithms

使用这些算法的PyMeeus实现和下面的代码,您可以获得 2018 年冬至的以下值(其中“冬天”是指北半球)。

winter solstice for 2018 in Terrestrial Time is at:
 (2018, 12, 21, 22, 23, 52.493725419044495)

winter solstice for 2018 in UTC, if last leap second was (2016, 12):
 (2018, 12, 21, 22, 22, 43.30972542127711)

winter solstice for 2018 in local time, if last leap second was (2016, 12)
 and local time offset is -7.00 hours:
 (2018, 12, 21, 15, 22, 43.30973883232218)

i.e. 2018-12-21T15:22:43.309725-07:00

当然,答案并不精确到微秒,但我也想展示如何使用arrow.

代码:

from pymeeus.Sun import Sun
from pymeeus.Epoch import Epoch

year = 2018  # datetime.datetime.now().year
target="winter"

# Get terrestrial time of given solstice for given year
solstice_epoch = Sun.get_equinox_solstice(year, target=target)

print("%s solstice for %d in Terrestrial Time is at:\n %s" %
      (target, year, solstice_epoch.get_full_date()))

print("%s solstice for %d in UTC, if last leap second was %s:\n %s" %
 (target, year, Epoch.get_last_leap_second()[:2], solstice_epoch.get_full_date(utc=True)))

solstice_local = (solstice_epoch + Epoch.utc2local()/(24*60*60))
print("%s solstice for %d in local time, if last leap second was %s\n"
 " and local time offset is %.2f hours:\n %s" %
 (target, year, Epoch.get_last_leap_second()[:2],
  Epoch.utc2local() / 3600., solstice_local.get_full_date(utc=True)))

使用更酷的 ISO 和 TZ 感知模块Arrow: Better dates and times for Python,可以更好地打印:

import arrow
import math

slutc = solstice_epoch.get_full_date(utc=True)
frac, whole = math.modf(slutc[5])

print("i.e. %s" % arrow.get(*slutc[:5], int(whole), round(frac * 1e6)).to('local'))
于 2018-12-22T22:47:39.573 回答
1

我知道您正在寻找可以粘贴到此处的答案的内容,但我不得不提一下SPICE,这是一个由 JPL 的 NAIF 制作的工具包,由 NASA 资助。对于 Farmer's Almanac 的东西来说,这可能有点矫枉过正,但你提到了对精确度的兴趣,而且这个工具包经常用于行星科学。

于 2009-04-01T05:14:40.997 回答
1

我不确定这是否对您来说是一个足够准确的解决方案,但我发现了一个NASA 网站,其中包含一些用于计算春分点的代码片段以及一些其他天文类型的信息。我还找到了一些对名为《天文算法》的书的参考,如果网上无法获得相关信息,它可能会提供您需要的答案。

于 2009-04-01T05:01:39.967 回答
-2

如果您有兴趣,我已经用 C 和 Java 实现了 Jean Meeus(上面提到的天文算法的作者)的春分和至日算法。

于 2009-05-28T17:29:19.077 回答