Python Ephem日落和日出

时间:2016-10-08 15:39:02

标签: python pyephem

我正在尝试计算给定日期和地点的确切日照时数。我一直在看python模块" Ephem"用于日出和设定计算。以下是代码:

import ephem
California_forest = ephem.Observer()
California_forest.date = '2001/01/01 00:00'
California_forest.pressure = 0
California_forest.horizon = '-0:34'
California_forest.lat, California_forest.lon = '38.89525', '-120.63275'
California_forest.altitude = 1280

print(California_forest.previous_rising(ephem.Sun()))
2000/12/31 15:21:06

print(California_forest.previous_rising(ephem.Sun()))
2001/1/1 00:50:46

该模块的工作原理就像它的教程所示。但是,我认为你可以拯救"日出"和"夕阳"输出为字符串。当我将计算保存到变量时,它给了我一个我不理解的浮点数:

sunrise = California_forest.previous_rising(ephem.Sun())
sunrise
36890.13965508334

sunset = California_forest.next_setting(ephem.Sun())
sunset
36890.53525430675

我期待一个与print语句输出相同的字符串,但我错了。有没有人建议如何使用这些输出并计算给定位置的白天时间?非常感谢!

2 个答案:

答案 0 :(得分:2)

看起来这会返回一个ephem._libastro.Date对象,当convrted to str返回打印时看到的格式正确的字符串时。

如果您只是在控制台中输入sunrise,那实际上与print(repr(sunrise))相同,这不会产生漂亮的字符串。它打印基础浮动值。

如果要保存字符串表示,只需将其转换为str

即可
sunrise = str(California_forest.previous_rising(ephem.Sun()))

答案 1 :(得分:1)

你真正的对象的字符串表示是什么。如果必须获取它的字符串表示,请按以下方式调用__str__()特殊方法。

sunrise = California_forest.previous_rising(ephem.Sun()).__str__()
sunrise
'2000/12/31 15:21:06'

sunset = California_forest.next_setting(ephem.Sun()).__str__()
sunset
'2001/1/1 00:50:46'