0% found this document useful (0 votes)
148 views4 pages

Sun (Rise:Set) Algo

This document describes a sunrise/sunset algorithm that takes in date, location, and zenith angle and calculates the local time of sunrise and sunset. It involves 10 steps: 1) calculate the day of the year, 2) convert longitude to hours and get approximate times, 3) calculate the sun's mean anomaly, 4) calculate true longitude, 5) calculate right ascension, 6) calculate declination, 7) calculate local hour angle, 8) calculate local mean time, 9) adjust to UTC, 10) convert to local time zone.

Uploaded by

indians jones
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
148 views4 pages

Sun (Rise:Set) Algo

This document describes a sunrise/sunset algorithm that takes in date, location, and zenith angle and calculates the local time of sunrise and sunset. It involves 10 steps: 1) calculate the day of the year, 2) convert longitude to hours and get approximate times, 3) calculate the sun's mean anomaly, 4) calculate true longitude, 5) calculate right ascension, 6) calculate declination, 7) calculate local hour angle, 8) calculate local mean time, 9) adjust to UTC, 10) convert to local time zone.

Uploaded by

indians jones
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

Sunrise/Sunset Algorithm

Source:
Almanac for Computers, 1990
published by Nautical Almanac Office
United States Naval Observatory
Washington, DC 20392

Inputs:
day, month, year: date of sunrise/sunset
latitude, longitude: location for sunrise/sunset
zenith: Sun's zenith for sunrise/sunset
offical = 90 degrees 50'
civil = 96 degrees
nautical = 102 degrees
astronomical = 108 degrees

NOTE: longitude is positive for East and negative for West


NOTE: the algorithm assumes the use of a calculator with the
trig functions in "degree" (rather than "radian") mode. Most
programming languages assume radian arguments, requiring bac
and forth convertions. The factor is 180/pi. So, for instanc
the equation RA = atan(0.91764 * tan(L)) would be coded as R
= (180/pi)*atan(0.91764 * tan((pi/180)*L)) to give a degree
answer with a degree input for L.

1. first calculate the day of the year

N1 = floor(275 * month / 9)
N2 = floor((month + 9) / 12)
N3 = (1 + floor((year - 4 * floor(year / 4) + 2) / 3))
N = N1 - (N2 * N3) + day - 30
:
2. convert the longitude to hour value and calculate an approximate

lngHour = longitude / 15

if rising time is desired:


t = N + ((6 - lngHour) / 24)
if setting time is desired:
t = N + ((18 - lngHour) / 24)

3. calculate the Sun's mean anomaly

M = (0.9856 * t) - 3.289

4. calculate the Sun's true longitude

L = M + (1.916 * sin(M)) + (0.020 * sin(2 * M)) + 282.634


NOTE: L potentially needs to be adjusted into the range [0,

5a. calculate the Sun's right ascension

RA = atan(0.91764 * tan(L))
NOTE: RA potentially needs to be adjusted into the range [0

5b. right ascension value needs to be in the same quadrant as L

Lquadrant = (floor( L/90)) * 90


RAquadrant = (floor(RA/90)) * 90
RA = RA + (Lquadrant - RAquadrant)

5c. right ascension value needs to be converted into hours

RA = RA / 15

6. calculate the Sun's declination


:
sinDec = 0.39782 * sin(L)
cosDec = cos(asin(sinDec))

7a. calculate the Sun's local hour angle

cosH = (cos(zenith) - (sinDec * sin(latitude))) / (cosDec *

if (cosH > 1)
the sun never rises on this location (on the specified da
if (cosH < -1)
the sun never sets on this location (on the specified dat

7b. finish calculating H and convert into hours

if if rising time is desired:


H = 360 - acos(cosH)
if setting time is desired:
H = acos(cosH)

H = H / 15

8. calculate local mean time of rising/setting

T = H + RA - (0.06571 * t) - 6.622

9. adjust back to UTC

UT = T - lngHour
NOTE: UT potentially needs to be adjusted into the range [0

10. convert UT value to local time zone of latitude/longitude

localT = UT + localOffset
:
:

You might also like