I Giulian Day Number sono utili anche per ottenere una data aggiungendo un certo numero di giorni a una data di partenza:

codice:
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <iomanip>

using namespace std;

double JulianDay(int year, int month, int day)
{
    double retValue;
    double Y, M, D;
    double A, B;
    
    D = day;
    
    if ( month <= 2 )
    {
        Y = year - 1;
        M = month + 12;
    }
    else
    {
        Y = year;
        M = month;
    }
    
    A = (int)(Y/100);
    B = 2 - A + (int)(A/4);
    
    retValue = (int)(365.25 * (Y + 4716)) + (int)(30.6001 * (M + 1)) + D + B - 1524.5;
    
    return retValue;
    
}

void CalendarDate(double jd, int *year, int *month, int *day)
{
    double num = jd + 0.5;
    int Z = (int)num;
    double F = num - Z;    
    double A, B, C, D, E;
    int alpha;
    
    if ( Z < 2299161 )
    {
        A = Z;    
    }
    else
    {
        alpha = (int)( (Z - 1867216.25) / 36524.25 );
        A = Z + 1 + alpha - (int)(alpha / 4);
    }
    
    B = A + 1524;
    C = (int)( (B - 122.1) / 365.25 );
    D = (int)( 365.25 * C );
    E = (int)( (B - D) / 30.6001 );
    
    *day = B - D - (int)(30.6001 * E) + F;
    
    if ( E < 14 )
    {
        *month = E - 1;
    }
    else if ( E == 14 || E == 15 )
    {
        *month = E - 13;
    }
    
    if ( *month > 2 )
    {
        *year = C - 4716;
    }
    else if ( *month == 1 || *month == 2 )
    {
        *year = C - 4715;
    }
}

int DayOfTheWeek(double jd, char *strDay)
{
    int num = (int)(jd + 1.5);
    int retValue = num % 7;
    
    switch ( retValue )
    {
        case 0:
            strcpy(strDay, "Domenica");
            break;
        case 1:
            strcpy(strDay, "Lunedì");
            break;
        case 2:
            strcpy(strDay, "Martedì");
            break;
        case 3:
            strcpy(strDay, "Mercoledì");
            break;
        case 4:
            strcpy(strDay, "Giovedì");
            break;
        case 5:
            strcpy(strDay, "Venerdi");
            break;
        case 6:
            strcpy(strDay, "Sabato");
            break;            
    }
    
    return retValue;    
}

int IsLeapYear(int year)
{
    if ( year % 4 != 0 )
    {
        return 0;
    }
    else
    {
        if ( year % 100 != 0 )
            return 1;
        else if ( year % 400 != 0 )
            return 0;
        else
            return 1;            
    }
}

int DayOfTheYear(int year, int month, int day)
{
    int N, K;
    
    K = IsLeapYear(year) ? 1 : 2;    
    
    N = (int)( (275 * month)/9 ) - K * (int)( (month + 9)/12 ) + day - 30;
    
    return N;
}

int main ()
{
    int d1, m1, y1;
    int d2, m2, y2;
    
    int d3, m3, y3;    
    int d4, m4, y4;    
    
    double jd1, jd2, jd3, jd4;
    int diff;
    int addDays;
    int DayOfYear;
    
    char szDay[256];
    
    d1 = 5;
    m1 = 2;
    y1 = 1995;
    
    d2 = 31;
    m2 = 8;
    y2 = 2014;
    
    jd1 = JulianDay(y1, m1, d1);
    jd2 = JulianDay(y2, m2, d2);
    
    diff = (int)(jd2 - jd1);
    
    cout << endl;
    
    cout << "Data 1: " << d1 << "/" << m1 << "/" << y1 << endl;
    cout << "Data 2: " << d2 << "/" << m2 << "/" << y2 << endl;    
    cout << "Differenza in giorni: " << diff << endl << endl;
    
    CalendarDate(jd1, &y3, &m3, &d3);
    cout << std::setprecision(21) << "jd -> " << jd1 << " = " << d3 << "/" << m3 << "/" << y3 << endl << endl;
    
    
    d3 = 30;
    m3 = 6;
    y3 = 1954;    
    
    jd3 = JulianDay(y3, m3, d3);
    DayOfTheWeek(jd3, szDay);
    
    cout << d3 << "/" << m3 << "/" << y3 << " -> " << szDay << endl << endl;
    
    
    addDays = 89;    
    jd4 = jd3 + addDays;
    CalendarDate(jd4, &y4, &m4, &d4);
    DayOfTheWeek(jd4, szDay);
    DayOfYear = DayOfTheYear(y4, m4, d4);
    
    cout << d3 << "/" << m3 << "/" << y3 <<    " + " << addDays << " giorni = " << d4 << "/" << m4 << "/" << y4 << " " << szDay << "; " << DayOfYear << "° giorno dell'anno." << endl << endl;        
        
    return 0;
}

Output
[vincenzo]$ g++ -Wall -W -pedantic -O2 jd.cpp -o jd
[vincenzo]$ ./jd

Data 1: 5/2/1995
Data 2: 31/8/2014
Differenza in giorni: 7147

jd -> 2449753.5 = 5/2/1995

30/6/1954 -> Mercoledì

30/6/1954 + 89 giorni = 27/9/1954 Lunedì; 270° giorno dell'anno.