Re: HELP - Convert julian date to gregorian?
Date: 1995/11/25
Message-ID: <497ei6$5gq_at_earth.superlink.net>#1/1
In article <49034v$l85_at_eccdb1.pms.ford.com>,
srini_at_ba0023.ba.ford.com (scharedd) wrote:
>This takes the date starting from 16-NOV-1989
>This works on Hpunix and localtime() is on unix.
>long g_date[3]; should be declared in the calling
>program. So, we are using 20*365..... You can
>modify for your need accordingly.
>
>#include <time.h>
>
>void format_date (short j_date, long g_date[])
> {
> long tim_val; /* time in seconds */
> struct tm *tme; /* time structure */
>
> tim_val = j_date * 60 * 60 * 24 + ((20 * 365) - 40) * 60 * 60 * 24;
> tme = localtime (&tim_val);
> g_date[0] = (tme->tm_mon) + 1; /* convert to Gregorian date */
> g_date[1] = tme->tm_mday;
> g_date[2] = tme->tm_year;
> }
>
>Hope this helps.
>
>Srinivasa Chareddy
>scharedd_at_ba0023.ba.ford.com
fwiw, you could use the following (adapted from _Collected Algorithms of the
ACM, # 199_):
void JulianToGregorian(long lJulian, int *pnDay, int *pnMonth, int *pnYear)
{
long lDay, lMonth, lYear ;
lJulian = lJulian - 1721119L ;
lYear = (4*lJulian - 1) / 146097L ;
lJulian = (4 * lJulian) - 1 - (146097L * lYear) ;
lDay = lJulian / 4 ;
lJulian = ((4 * lDay) + 3) / 1461 ;
lDay = (4 * lDay) + 3 - (1461*lJulian) ;
lDay = (lDay + 4) / 4 ;
lMonth = ((5 * lDay) - 3) / 153 ;
lDay = (5 * lDay) - 3 - (153 * lMonth) ;
lDay = (lDay + 5) / 5 ;
lYear = (100 * lYear) + lJulian ;
if(lMonth < 10)
{
lMonth += 3 ;
}
else
{
lMonth -= 9 ;
lYear++ ;
}
if(pnYear)
*pnYear = (int) lYear ;
if(pnMonth)
*pnMonth= (int) lMonth ;
if(pnDay)
*pnDay = (int) lDay ;
return ;
}
*------------------------------------* * jim cox *
* jc_at_mars.superlink.net
*------------------------------------*Received on Sat Nov 25 1995 - 00:00:00 CET