Skip to content

Sunrise and sunset time

Approximated calculation of sunrise and sunset time. Adapted from https://github.com/SatAgro/suntime.

Class methods

class Sun

Sun(latitude, longitude)

Arguments latitude and longitude are floats representing the coordinates of a place on Earth.

method get_sunrise_time

get_sunrise_time(year, month, day)

Calculate the sunrise time for the given date. It returns a tuple of integers (hour, minute) in UTC time or None if sun doesn't raise on that location at the given date.

method get_sunset_time

get_sunset_time(year, month, day)

Calculate the sunset time for the given date. It returns a tuple of integers (hour, minute) in UTC time or None if sun doesn't set on that location at the given date.

Examples of usage

This example calculates sunrise and sunset of three major cities::

import suntime

test('suntime: example')

Rome     = suntime.Sun( 41.902782 , 12.496366 )
Warsaw   = suntime.Sun( 51.21     , 21.01     )
CapeTown = suntime.Sun(-33.9252192, 18.4240762)

dt1 = (2000, 1, 1)
sr1 = Rome.get_sunrise_time(*dt1) # (6, 38)
ss1 = Rome.get_sunset_time (*dt1) # (15, 49)
print('Rome:', sr1, ss1)

dt2 = (2014, 10, 3)
sr2 = Warsaw.get_sunrise_time(*dt2) # (4, 39)
ss2 = Warsaw.get_sunset_time (*dt2) # (16, 10)
print('Warsaw:', sr2, ss2)

dt3 = (2016, 12, 21)
sr3 = CapeTown.get_sunrise_time(*dt3) # (3, 32)
ss3 = CapeTown.get_sunset_time (*dt3) # (17, 57)
print('Cape Town:', sr3, ss3)

If datetime module is available, results above can be expressed in local time::

import datetime as datetimelib

timedelta = datetimelib.timedelta
timezone  = datetimelib.timezone
datetime  = datetimelib.datetime

utc = timezone.utc
tz1 = timezone(timedelta(hours=1))
tz2 = timezone(timedelta(hours=3))
tz3 = timezone(timedelta(hours=2))

# https://www.timeanddate.com/sun/italy/rome?month=1&year=2000
print('Rome:')
rt1 = datetime(*dt1, *sr1, tzinfo=utc).astimezone(tz1) # 2000-01-01 07:38:00+01:00
st1 = datetime(*dt1, *ss1, tzinfo=utc).astimezone(tz1) # 2000-01-01 16:49:00+01:00
print('>', rt1)
print('>', st1)

# https://www.timeanddate.com/sun/poland/warsaw?month=10&year=2014
print('Warsaw:')
rt2 = datetime(*dt2, *sr2, tzinfo=utc).astimezone(tz2) # 2014-10-03 07:39:00+03:00
st2 = datetime(*dt2, *ss2, tzinfo=utc).astimezone(tz2) # 2014-10-03 19:10:00+03:00
print('>', rt2)
print('>', st2)

# https://www.timeanddate.com/sun/south-africa/cape-town?month=12&year=2016
print('Cape Town:')
rt3 = datetime(*dt3, *sr3, tzinfo=utc).astimezone(tz3) # 2016-12-21 05:32:00+02:00
st3 = datetime(*dt3, *ss3, tzinfo=utc).astimezone(tz3) # 2016-12-21 19:57:00+02:00
print('>', rt3)
print('>', st3)