日出的Python Astral计算,同一日期的两个不同时间

时间:2019-04-30 15:47:16

标签: python python-3.x datetime

我编写了一个太阳能电池板调整程序,该程序可将电池板移动到太阳位置。当我计算第二天(前一天晚上)的日出时,与早晨再次计算日出时有所不同。大约要等一分钟。

该程序第二天早晨运行“夜间功能”,而不是启动“白天功能”。通过故障排除,我发现日出时间在变化,这取决于我是在前一天晚上还是早上进行计算。

    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 :(得分:0)

函数astral.Location.sun的文档字符串指出,date输入参数应使用datetime.date对象(即日期)。在我看来,当给定datetime.datetime对象(即日期和时间)作为输入时,该函数会感到困惑并产生不正确的结果。这可能解释了代码中的奇怪行为。

因此,尝试用calc_Tomorrow = curr_Time + timedelta(days=1)替换代码中的calc_Tomorrow = curr_Time.date() + timedelta(days=1)