# How to compute sunrise & sunset in Python using skyfield

The following code will compute the sunrise & sunset at a specific location & elevation using the `skyfield` library. Note that you need to download `de413.bsp` .

```from skyfield import api
from skyfield import almanac
from datetime import datetime
from datetime import timedelta
import dateutil.parser
from calendar import monthrange

def compute_sunrise_sunset(location, year=2019, month=1, day=1):
t0 = ts.utc(year, month, day, 0)
# t1 = t0 plus one day
t1 = ts.utc(t0.utc_datetime() + timedelta(days=1))
t, y = almanac.find_discrete(t0, t1, almanac.sunrise_sunset(ephem, location))
sunrise = None
for time, is_sunrise in zip(t, y):
if is_sunrise:
sunrise = dateutil.parser.parse(time.utc_iso())
else:
sunset = dateutil.parser.parse(time.utc_iso())
return sunrise, sunset

# Compute sunrise & sunset for random location near Munich
location = api.Topos('48.324777 N', '11.405610 E', elevation_m=519)
now = datetime.now()
sunrise, sunset = compute_sunrise_sunset(location, now.year, now.month, now.day)

# Print result (example)
print(f'Sunrise today: {sunrise}')
print(f'Sunset today: {sunset}')```

#### Definition of sunrise & sunset in this context

According to the `skyfield` documentation:

`Skyfield uses the same definition as the United States Naval Observatory: the Sun is up when its center is 0.8333 degrees below the horizon, which accounts for both its apparent radius of around 16 arcminutes and also for the 34 arcminutes by which atmospheric refraction on average lifts the image of the Sun.`

#### Other caveats

• Note that obstructions like mountains are not taken into account for this model
• Note that the resulting timestamps are UTC, if you want local time, you’ll have to convert them appropriately

#### Example output:

```Sunrise today: 2022-06-19 03:12:56+00:00
Sunset today: 2022-06-19 19:18:38+00:00```