This works for Julian dates from 1/1/1900(start of last century) - Enter the date as DD MM CCYY - ie 16 10 1959
or as a julian date (eg 100 )to convert to calendar date.
Entering no args gives today's date
#!/usr/bin/ksh
integer jdate=0
integer d=0
integer m=0
integer y=0
integer argc=$#
case $argc in
0) break;;
1) jdate=$1
break;;
3) d=$1
m=$2
y=$3
break;;
*) echo "usage is $(basename $0) [jd | d m y ]"
exit 1 ;;
esac
awk -v argc="$argc" -v jdate="$jdate" -v d="$d" -v m="$m" -v y="$y" '
function isly

{
x=0
if(y%400==0) x=x+1
if(y%100==0) x=x-1
if(y%4 ==0) x=x+1
return x
}
function daysin(m,y)
{
if(m==2) return 28+isly
if(m==4 || m==6 || m==9 || m==11) return 30
return 31
}
function fDateToJulian( day, month, year )
{
ldaynumber=day
for(lmonth=1; lmonth<month; lmonth++)
{
ldaynumber+=daysin(lmonth,year)
}
for(lyear=1900;lyear<year; lyear++)
{
ldaynumber+= 365+isly(lyear)
}
return ldaynumber
}
function fJulianToDate(jdate)
{
d=1
m=1
y=1900
while( jdate-(365+isly

) > 0 )
{
jdate-=365+isly

y=y+1
}
while( jdate-daysin(m,y) >0)
{
jdate-= daysin(m,y)
m=m+1
}
d=jdate
}
BEGIN {
if(argc==0)
{
"date +\"%d %m %Y\"" | getline datestr
$0=datestr
d=$1
m=$2
y=$3
juliandate= fDateToJulian( d,m,y)
printf("today is %02d/%02d/%04d -> %d\n",d,m,y, juliandate)
}
if(argc==1)
{
fJulianToDate(jdate)
printf("%d -> %02d/%02d/%04d\n",jdate,d,m,y)
}
if(argc==3)
{
juliandate= fDateToJulian( d,m,y)
printf("%02d/%02d/%04d -> %d\n",d,m,y, juliandate)
}
}'
;-)HTH ;-) Dickie Bird
db@dickiebird.freeserve.co.uk