Click here to Skip to main content
11,705,610 members (47,873 online)
Click here to Skip to main content

Sunrise/Sunset Calculations

, 14 Dec 2000 123.3K 3.4K 30
Rate this:
Please Sign up or sign in to vote.
Code to help calculate sunrise and sunset times
<!-- Download Links -->
  • Download source files - 4 Kb
  • Download demo project - 12 Kb
  • <!-- Main HTML starts here -->

    Introduction

    I searched the web for a piece of code that calculates the Sunrise/Sunset based on the Date and a latitude and longitude, but could not find one in C++ that was freely available. People have FreeWare out there, but were unwilling to give out the source as they deemed it to "valuable". So I took it upon myself to convert one of the other freely available pieces of code, and convert it for everyone to use.

    I have written a the following C++ code. It is based heavily on the Javascript I obtained directly from the NOAA. I find that many applications may have a use for this information, so feel free to use it to make your own FreeWare tray applications, or any other Utility Programs.

    The Main three functions are:

    CTime GetSunset(double dLat,double dLon,CTime time);
    CTime GetSunrise(double dLat,double dLon,CTime time);
    CTime GetSolarNoon(double dLon, CTime time);
    

    which take in Latitude and Longitude values as doubles and a CTime with the Date that you want to calculate the SR/SS for. It returns a CTime in UTC.

    I have included a non-MFC Tray icon class I have written, with the example.. It has the basic functionality to display a tray icon, and can be used in MFC, Win32 and ATL applications. Probably not as good as the newest CSystemTray, but I use it with Win32 to make very small footprint applications!!

    I have also added more functionality to the demo, as the way I originally submitted it, it had very little actual functionality. I also added the code so it is converted from UTC as well.

    Hope someone finds it Useful....

    License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here

    Share

    About the Author

    Brian Heilman
    Software Developer Birdsoft
    United States United States
    Software Engineer with years of Visual C++ and Objective-C
    experience.

    Developed Windows Mobile applications including All-In Hold 'Em, Extreme Agenda, and The Dog Ate It.

    Now mostly iOS development with the popular title Extreme Agenda as a flagship.

    You may also be interested in...

    Comments and Discussions

     
    Bugyou have a bug in minus location Pin
    Member 769785810-Sep-11 22:00
    memberMember 769785810-Sep-11 22:00 
    QuestionGreat stuff is there a fix for DST? Pin
    Robert Valentino6-Apr-11 3:45
    memberRobert Valentino6-Apr-11 3:45 
    Generalhelp Pin
    Member 76555218-Feb-11 5:10
    memberMember 76555218-Feb-11 5:10 
    GeneralMy vote of 2 Pin
    craig.miller26-May-10 13:01
    membercraig.miller26-May-10 13:01 
    GeneralRe: My vote of 2 Pin
    Pat Kujawa24-Mar-11 5:46
    memberPat Kujawa24-Mar-11 5:46 
    QuestionCan i have C# version of this code Pin
    toashokin15-Sep-09 23:01
    membertoashokin15-Sep-09 23:01 
    AnswerRe: Can i have C# version of this code Pin
    Pat Kujawa24-Mar-11 5:46
    memberPat Kujawa24-Mar-11 5:46 
    QuestionDoes anyone know how to get the Noon Rise / set times from this? Pin
    peterdrozd20-Aug-08 3:52
    memberpeterdrozd20-Aug-08 3:52 
    QuestionDid anyone do a clean up? Pin
    JustASoftwareGuy6623-Dec-06 8:50
    memberJustASoftwareGuy6623-Dec-06 8:50 
    Generalwrong result? help Pin
    anqincmt5-Dec-05 13:50
    memberanqincmt5-Dec-05 13:50 
    GeneralCorrect UTC Offset Pin
    jheddings1-Dec-05 15:22
    memberjheddings1-Dec-05 15:22 
    Questionconverting to vb.net? Pin
    michal_s_w1-Nov-05 8:31
    membermichal_s_w1-Nov-05 8:31 
    GeneralComparison didn't work Pin
    JWood3-May-05 16:25
    memberJWood3-May-05 16:25 
    GeneralNorth/South &amp; West/East Pin
    Stanislav Khatsko24-Oct-04 3:27
    sussStanislav Khatsko24-Oct-04 3:27 
    GeneralInput Pin
    Piccinano25-Feb-03 3:36
    memberPiccinano25-Feb-03 3:36 
    GeneralRe: Input Pin
    Anonymous21-Jun-03 14:03
    sussAnonymous21-Jun-03 14:03 
    GeneralRe: Input Pin
    Stanislav Khatsko24-Oct-04 3:32
    sussStanislav Khatsko24-Oct-04 3:32 
    GeneralDaylight Savings Pin
    Darroll Walsh9-Apr-02 4:42
    memberDarroll Walsh9-Apr-02 4:42 
    GeneralRe: Daylight Savings Pin
    Darroll Walsh9-Apr-02 5:20
    memberDarroll Walsh9-Apr-02 5:20 
    GeneralRe: Daylight Savings Pin
    Ezel324-Nov-03 2:24
    sussEzel324-Nov-03 2:24 
    GeneralRe: Daylight Savings Pin
    KSharenkov11-Jan-05 18:02
    sussKSharenkov11-Jan-05 18:02 
    GeneralDosen't work ;( Pin
    Tutankhamen2-Jul-01 5:14
    memberTutankhamen2-Jul-01 5:14 
    GeneralRe: Dosen't work ;( Pin
    craig.miller26-May-10 13:02
    membercraig.miller26-May-10 13:02 
    QuestionWhat about height ? Pin
    Miron Ophir30-Dec-00 3:35
    memberMiron Ophir30-Dec-00 3:35 
    Generalconvert UTC to LOCAL Pin
    Brian H21-Nov-00 9:51
    memberBrian H21-Nov-00 9:51 
    Hi,

    I have since had to use my own code for a Utility Im
    writing for my fishing site(Uglybass.com), so I figured
    out how to convert quite easily to Local time... Just
    add the three lines given below to the bottom of all three function; GetSunrise(..) GetSunset(..) and GetSolarnoon(..) right before the line:

    CTime NewTime(time.GetYear(),time.GetMonth(),time.GetDay(),iHour,iMinute,iSecond);


    add:

    _tzset();
    int iHrToTimeZone = _timezone / 3600; //returns a difference value in seconds
    iHour -= iHrToTimeZone;

    Sorry, for the original sloppy article. I believe I was a
    little ticked at the people who didn't want to share this
    simple code!!! So I wrote it very quickly!!

    Enjoy!!!

    Brian

    GeneralCTime Pin
    Norm Almond20-Jul-00 5:45
    sussNorm Almond20-Jul-00 5:45 
    GeneralRe: CTime Pin
    Crispy18-Dec-00 12:22
    memberCrispy18-Dec-00 12: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 | Terms of Use | Mobile
    Web02 | 2.8.150819.1 | Last Updated 15 Dec 2000
    Article Copyright 2000 by Brian Heilman
    Everything else Copyright © CodeProject, 1999-2015
    Layout: fixed | fluid