In my C application, I want to calculate sunrise/sunset times for a given date, latitude and longitude. i have been searching on the net but i can not find a working sample.
I tried to implement this sample: http://souptonuts.sourceforge.net/code/sunrise.c.html
But this sample didnt work correctly.
Is there a simple C source code or method which i can easly implement in my application?
Edit:
I implement the code on this link but it gave me the wrong sunset/sunrise values. Also i tried the Saul's link here but it gave me the wrong result either.
I have 41N, 28E location. When i try the codes, both sample says that sunrise value is aproximately 10:13 and sunset is 23:24. But the correct values are 06:06, 20:13.
I can not understand the problem.
This is adaptable and is quite accurate. You'll get all the components and then all you need to calculate is the arc cosine for the Zenith to Horizon angle. Yes there are simpler ways but don't you basically want to track the Sun? It could come in handy some day. http://www.nrel.gov/midc/spa/
Ten simple steps to follow to calculate sunrise / sunset time given the date, latitude and longitude
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
convert the longitude to hour value and calculate an approximate time
lngHour = longitude / 15
if rising time is desired: t = N + ((6 - lngHour) / 24) if setting time is desired: t = N + ((18 - lngHour) / 24)
calculate the Sun's mean anomaly
M = (0.9856 * t) - 3.289
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,360) by adding/subtracting 360
5a. calculate the Sun's right ascension
5b. right ascension value needs to be in the same quadrant as L
5c. right ascension value needs to be converted into hours
calculate the Sun's declination
sinDec = 0.39782 * sin(L) cosDec = cos(asin(sinDec))
7a. calculate the Sun's local hour angle
7b. finish calculating H and convert into hours
calculate local mean time of rising/setting
T = H + RA - (0.06571 * t) - 6.622
adjust back to UTC
UT = T - lngHour NOTE: UT potentially needs to be adjusted into the range [0,24) by adding/subtracting 24
convert UT value to local time zone of latitude/longitude
localT = UT + localOffset
Pure
C
implementations are apparently scarce but if You are willing to port either fromC++
orC#
then there are a couple of options:This seems quite easy to implement:
http://edwilliams.org/sunrise_sunset_algorithm.htm
There is a c solution with an objective c wrapper for sunrise/set here: https://github.com/berkley/ObjectiveCUtil
Using this guide (which was first posted by @BenjaminMonate and I assume is the same one @Geetha used), I built this C function which seems to work correctly.