# 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)
``````