我看过这里使用ephem来计算日出和日落的示例,并且可以很好地工作。

尝试计算两次之间的中点时遇到麻烦。这是我所拥有的:

import datetime
import ephem

o = ephem.Observer()
o.lat, o.long, o.date = '37.0625', '-95.677068', datetime.datetime.utcnow()
sun = ephem.Sun(o)
print "sunrise:", o.previous_rising(sun), "UTC"
print "sunset:",o.next_setting(sun), "UTC"
print "noon:",datetime.timedelta((o.next_setting(sun)-o.previous_rising(sun))/2)

我得到:

日出:2010/11/2 12:47:40 UTC
日落时间:2010年11月2日23:24:25 UTC
中午:5:18:22.679044

那就是我被困住的地方。我是python的初学者,坦率地说,一般来说程序员不多。

任何建议将是最欢迎的!

最佳答案

太阳正午不是日出和日落的平均时间(有关说明,请参见equation of time)。 ephem软件包具有methods for getting transit times,应改为使用:

>>> import ephem
>>> o = ephem.Observer()
>>> o.lat, o.long = '37.0625', '-95.677068'
>>> sun = ephem.Sun()
>>> sunrise = o.previous_rising(sun, start=ephem.now())
>>> noon = o.next_transit(sun, start=sunrise)
>>> sunset = o.next_setting(sun, start=noon)
>>> noon
2010/11/6 18:06:21
>>> ephem.date((sunrise + sunset) / 2)
2010/11/6 18:06:08

请注意,今天中午比日出和日落的平均值晚13秒(在您的位置)。

(代码行ephem.date((sunrise + sunset) / 2)显示了正确执行操作的方式,可以轻松地在ephem包中操作日期。)

关于python - 使用ephem计算 "Solar Noon",转换为本地时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4082533/

10-12 07:26