【问题标题】:Python Ephem sunset and sunrisePython Ephem 日落和日出
【发布时间】:2016-10-08 23:58:24
【问题描述】:

我正在尝试计算给定日期和位置的确切日光时间。我一直在查看用于日出和设置计算的 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 语句输出相同的字符串,但我错了。有没有人建议我如何使用这些输出并计算给定位置的日光时间?将不胜感激!

【问题讨论】:

  • print(repr(sunrise))print(sunrise)print(type(sunrise)),你会得到什么?

标签: python pyephem


【解决方案1】:

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

如果你只是在控制台中输入sunrise,那实际上和print(repr(sunrise)) 是一样的,不会产生好看的字符串。它打印底层的浮点值。

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

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

【讨论】:

    【解决方案2】:

    你真正用什么字符串表示你的对象。如果一定要获取它的字符串表示,那么调用__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'
    

    【讨论】:

    • __str__ 是python解释器在将某些内容转换为str时调用的特殊方法。可以直接调用,不过直接调用str(whatever)会好很多
    猜你喜欢
    • 1970-01-01
    • 2016-12-23
    • 2011-05-05
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多