我正在尝试计算给定日期和地点的确切日照时数。我一直在看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语句输出相同的字符串,但我错了。有没有人建议如何使用这些输出并计算给定位置的白天时间?非常感谢!
答案 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'