Re: HELP - Convert julian date to gregorian?

From: jim cox <jc_at_mars.superlink.net>
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

Original text of this message