Астральные вычисления Python для Sunrise, два разных времени - PullRequest
2 голосов
/ 30 апреля 2019

Я написал программу настройки панели солнечных батарей, которая перемещает панель в положение солнца. Когда я вычисляю восход солнца на следующий день (прошлой ночью), он отличается от того, когда я вычисляю его снова утром. Это чуть более минуты.

Программа запускала «ночную функцию» на следующее утро вместо запуска «дневной функции». Благодаря устранению неполадок я выяснил, что время восхода солнца меняется в зависимости от того, рассчитал ли я его накануне или утром.

    ast = Astral()
    city_Name = 'Cleveland'
    local_City = ast[city_Name]

    def get_Current_Time():
        eastern = pytz.timezone('America/New_York')
        curr_Time = datetime.now(eastern)
        return curr_Time

    def solar_Adjust_Deactive():
        global local_City
        curr_Time = get_Current_Time()
        calc_Tomorrow = curr_Time + timedelta(days=1)
        sun_Position_Tomorrow = local_City.sun(local=True, date = calc_Tomorrow)
        solar_Sunrise_Tomorrow = sun_Position_Tomorrow.get('sunrise')

    def main_Function():
        global local_City
        sun_Position = local_City.sun(local=True)
        current_Time = get_Current_Time()
        solar_Sunrise = sun_Position.get('sunrise')

Ожидаемые результаты будут такими же, как время восхода солнца, независимо от того, рассчитываю ли я его накануне или на следующее утро.

Фактические результаты: Восход завтра Завтра 2019-04-30 06: 23: 29-04: 00 (Расчетное ночью) Восход солнца сегодня 2019-04-30 06: 24: 38-04: 00 (расчетное утро)

1 Ответ

0 голосов
/ 01 мая 2019

Строка документа функции astral.Location.sun гласит, что объект datetime.date (т.е. только дата) ожидается для входного параметра date. Мне кажется, что функция запутывается и выдает неверные результаты, когда в качестве входных данных указывается объект datetime.datetime (т.е. дата плюс время). Это может объяснить странное поведение в вашем коде.

Поэтому попробуйте заменить calc_Tomorrow = curr_Time + timedelta(days=1) в своем коде на calc_Tomorrow = curr_Time.date() + timedelta(days=1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...