Click here to Skip to main content
Click here to Skip to main content

Solar Calculator - Calculate Sunrise, Sunset, and Maximum Solar Radiation

, 10 Jan 2011
Rate this:
Please Sign up or sign in to vote.
A C# assembly for calculating Sunrise, Sunset, and Maximum Solar Radiation
LetsGrow_Weather_WordPress_PlugIn.png

Introduction

I was looking for a .NET library to calculate the time the sun rises and sets. There were some libraries available, including here on The Code Project, but they had some problems. After trying some, I decided to create one myself. I needed the sunrise, sunset, and maximum solar radiation for a WordPress plug-in on my blog. The plug-in shows a map of the Netherlands together with the current weather conditions. The top of this post shows a screenshot of the plug-in. The map shows the real-time temperature including an icon. The icon is a translation of the measured solar radiation against the maximum solar radiation.

Background

It is possible to calculate the sunrise, sunset, and maximum solar radiation using some known algorithms. For those of you who are interested in these algorithms, take a look at the following pages at Wikipedia: Declination of the Sun, Sunrise, Sunset. If you just want to calculate the sunrise, sunset, and maximum solar radiation, take a look below at how to use the code.

Using the Code

The code is packed in a Visual Studio 2008 solution. It contains two assemblies: Astronomy and AstronomyTest. The assembly Astronomy contains the SunCalculator class which performs the actual calculation. The assembly AstronomyTest contains several unit-tests that validate the calculations against external sources.

SunCalculator is a single class that does not depend on external classes. Although this somewhat goes against the Single Responsibility Principle, it makes reuse of this class easier. The SunCalculator class needs the longitude, latitude, and time-zone of your location. You should also indicate whether to use daylight savings. An instance of the SolarCalculator can be created like this:

const Double Longitute = 5.127869;
const Double Latitude = 52.108192;
const int LongituteTimeZone = 15;
const bool UseSummerTime = true;
     
SunCalculator sunCalculator = new SunCalculator(Longitute, Latitude, 
              LongituteTimeZone, UseSummerTime);

You have to supply the longitude and the latitude from the location that you want to calculate the sunrise and sunset time. These are the two first arguments of the constructor. For locations that use daylight savings, you should set UseSummerTime to the actual daylight savings status. For locations that don't use daylight savings, set it to false.

The actual calculation of sunrise, sunset, and maximum solar radiation can be seen below:

DateTime sunRise = sunCalculator.CalculateSunRise(new DateTime(2010, 4, 1));
DateTime sunSet = sunCalculator.CalculateSunSet(new DateTime(2010, 4, 1));
Double maximumSolarRadiation = 
  sunCalculator.CalculateMaximumSolarRadiation(new DateTime(2010, 1, 26, 16, 30, 0));

The DateTime that is returned from CalculateSunRise and CalculateSunSet includes the sunrise and sunset time. For more information, take a look at the unit-tests in the assembly AstronomyTest.

Points of Interest

The code first calculates the declination of the sun, cosine of the sun position, sinus of the sun position, and the difference between the solar and the actual time. All these parameters are used to calculate the sunrise and sunset times.

If you want to see the plug-in live, see my blog www.semanticarchitecture.net. The data that is retrieved and shown on the map comes from LetsGrow.com, the company that I work for.

History

  • v1.0 02/04/2010: Initial and first release
  • v1.1 28/05/2010: Added a test case for Los Angeles, and a Console application that demonstrates the library in the source code
  • v1.2 08/11/2011: Fixed failing tests

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Patrick Kalkman
Architect http://www.hinttech.nl
Netherlands Netherlands
Patrick Kalkman is a senior Software Architect with more than 20 years professional development experience. He works for Hinttech where he develops state of the art web applications.

Patrick enjoys writing his blog. It discusses software architectures using semantic web technologies. Patrick can be reached at pkalkie@gmail.com.
 
Published Windows 8 apps:
 
Published Windows Phone apps:
 
Awards:

Best Mobile article of March 2012
Best Mobile article of June 2012
Follow on   Twitter

Comments and Discussions

 
QuestionWhy can't you calculate the longituteTimeZone parameter? Pinmemberhichaeretaqua18-May-14 8:07 
GeneralMy vote of 5 Pinmemberridoy9-May-13 9:53 
GeneralMy vote of 5 PinmemberSperneder Patrick30-Apr-13 4:02 
GeneralRe: My vote of 5 PinmemberPatrick Kalkman30-Apr-13 4:22 
QuestionHow to calcualte LongituteTimeZone? Pinmemberfortuna_621-Jan-13 8:14 
AnswerRe: How to calcualte LongituteTimeZone? PinmemberPatrick Kalkman30-Apr-13 4:24 
GeneralMy vote of 4 PinmemberChristian Amado23-Aug-12 11:54 
GeneralRe: My vote of 4 PinmemberPatrick Kalkman30-Apr-13 4:18 
QuestionHi Patrick: Pinmembersquizfloats17-Aug-12 12:53 
AnswerRe: Hi Patrick: PinmemberPatrick Kalkman30-Apr-13 4:22 
QuestionSolar radiation PinmemberRuben Tacq3-Jul-12 21:11 
AnswerRe: Solar radiation PinmemberPatrick Kalkman30-Apr-13 4:19 
QuestionWrong result Pinmembermadcat23-Mar-12 12:18 
AnswerRe: Wrong result [modified] PinmemberPatrick Kalkman24-Mar-12 4:02 
QuestionHyperlink Failure PinmemberVasudevan Deepak Kumar29-Feb-12 4:34 
AnswerRe: Hyperlink Failure PinmemberPatrick Kalkman24-Mar-12 4:04 
Questionwrong calculation PinmemberMember 816554716-Aug-11 11:08 
AnswerRe: wrong calculation PinmemberPatrick Kalkman24-Mar-12 4:06 
GeneralI see an "update" for Nov 8, 2011.... Pinmemberhenslecd3-Jun-11 2:08 
GeneralRe: I see an "update" for Nov 8, 2011.... PinmemberPatrick Kalkman7-Jun-11 20:43 
GeneralNot able to get corret sunrise and sunset time PinmemberParesh Rathod11-May-11 9:56 
Hi,
 
Below are the Lat/Lan for my location:
 
Lat - 22.21290940
Lang - 70.384205
 
I don't know why, but some reason i am not getting the correct sunrise/sunset time.
I am getting mid-night times like 12:00 AM and 1 AM as a sunrise time.
 
Can you please help me in that, i am in timezone IST which is GMT +5.50
 
Regards,
Paresh Rathod
Regards,
Paresh Rathod

GeneralRe: Not able to get corret sunrise and sunset time PinmemberPatrick Kalkman17-May-11 2:24 
GeneralSky brightness PinmemberAndrew Jones19-Sep-10 4:55 
Questionhow to determine timezone Pinmembermartkoch5-Sep-10 23:06 
AnswerRe: how to determine timezone PinmemberPatrick Kalkman6-Sep-10 0:58 
QuestionCould this be used to calculate the time of day that a given solar angle occurs? [modified] Pinmembertidyup3-Sep-10 0:11 
QuestionCould this help the accuracy? Pinmemberhenslecd30-May-10 17:46 
AnswerRe: Could this help the accuracy? PinmemberPatrick Kalkman31-May-10 6:51 
GeneralRe: Could this help the accuracy? Pinmemberhenslecd31-May-10 6:59 
GeneralRe: Could this help the accuracy? Pinmemberhenslecd18-Jun-10 16:44 
GeneralIncorrect PinmemberZamir Farooqi27-May-10 12:08 
GeneralRe: Incorrect PinmemberPatrick Kalkman27-May-10 18:47 
GeneralRe: Incorrect PinmemberPatrick Kalkman27-May-10 19:52 
GeneralRe: Incorrect PinmemberZamirF28-May-10 7:15 
QuestionExample? Pinmembert.a berglund27-May-10 9:36 
AnswerRe: Example? PinmemberPatrick Kalkman27-May-10 18:49 
AnswerRe: Example? PinmemberPatrick Kalkman27-May-10 20:19 
GeneralRe: Example? Pinmembert.a berglund28-May-10 5:22 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140709.1 | Last Updated 10 Jan 2011
Article Copyright 2010 by Patrick Kalkman
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid