astral icon indicating copy to clipboard operation
astral copied to clipboard

Astral fails to correctly calculate sunrise and sunset times in unique test case of Norwegian Winter

Open FMKaiba opened this issue 3 years ago • 10 comments

import pytz
import datetime

import astral
import astral.location

tz='UTC'
utc_now = datetime.datetime(2010, 1, 1, tzinfo=pytz.timezone(tz))

obs = astral.Observer(latitude=66.5, longitude=162.4, elevation=0.0)

print(utc_now) # datetime.datetime(2010, 1, 1)

sunrise = astral.sun.sunrise(obs,utc_now)
sunset = astral.sun.sunset(obs,utc_now)
print(sunrise)
print(sunset)

utc_now = sunrise + datetime.timedelta(seconds=15)
print(utc_now) # Adjusted time to just after sunrise

print(astral.sun.sunrise(obs,utc_now)) #Completely different sunrise time, day before, why not same as above?
print(astral.sun.sunset(obs,utc_now)) #Same issue... getting time for previous day.

Produces: 2010-01-01 00:00:00+00:00 2009-12-31 23:53:51.078028+00:00 <==Sunrise Time 2010-01-01 02:33:44.399907+00:00 <==Sunset Time 2009-12-31 23:54:06.078028+00:00 <== Adjust time to Sunrise Time + 15 seconds 2009-12-30 23:55:49.136837+00:00 <== New Sunrise Time 2009-12-31 02:30:47.610544+00:00 <== New Sunset Time

FMKaiba avatar Mar 28 '21 11:03 FMKaiba

Same here. This is exactly what I came to report. While troubleshooting I've made a debug print log:

 # this is when the function was called
2021-04-10 01:00:00.015625, light schedule updated 
# this is the resulting data .. for the day before.
dawn:  2021-04-09 02:59:08.007731
dusk:  2021-04-09 20:37:25.089938

Using Astral 2.2

AndKe avatar Apr 10 '21 17:04 AndKe

It seems the solution can be achieved by edit this line of code

https://github.com/sffjunkie/astral/blob/96496f013a30458e84639bebc8b5faef1a989c26/src/astral/sun.py#L363-L370

yasirroni avatar Feb 25 '22 02:02 yasirroni

@yasirroni thanks, but what is that ? - it's not committed, not a PR? - will it make into a release soon?

AndKe avatar Feb 25 '22 17:02 AndKe

That is the code that astral use that we need to edit and make a PR to solve local timezone bug changing day.

yasirroni avatar Feb 25 '22 22:02 yasirroni

See suntime package. Basically they reproduce the same bug and I already fix that on suntime. Haven't got time to fix here too. I just pin point the problem for those willing to solve it.

yasirroni avatar Feb 25 '22 22:02 yasirroni

@yasirroni unfortunatly, I can not use suntime due to https://github.com/SatAgro/suntime/issues/18

AndKe avatar Feb 26 '22 12:02 AndKe

Have you try my fork on test-pypi? Go to test-pypi and search suntime-yasirroni

yasirroni avatar Feb 26 '22 12:02 yasirroni

@yasirroni thanks, but I try to stick to libraries from pip or so, to prevent wild searching and retracing what I did when something needs to run on another distro/hardware x years later.

AndKe avatar Mar 02 '22 21:03 AndKe

@yasirroni thanks, but I try to stick to libraries from pip or so, to prevent wild searching and retracing what I did when something needs to run on another distro/hardware x years later.

Then, you can fork it and publish it on pypi yourself. Easy, hahaa

yasirroni avatar Mar 07 '22 10:03 yasirroni

It seems the solution can be achieved by edit this line of code

https://github.com/sffjunkie/astral/blob/96496f013a30458e84639bebc8b5faef1a989c26/src/astral/sun.py#L363-L370

Thanks I had that problem today, astral was showing error, "Unable to find a dawn time on the date specified". After applying your correction it works fine. Thank you very much.

I did one correction though : "eq_of_time(t)" I replaced t with jc for jc = julianday_to_juliancentury(jd + adjustment)

ShakeelKadri avatar Mar 28 '24 11:03 ShakeelKadri