Matthew Seaman wrote:
[snip]
> > > see the following url on a portable (awk and ksh) replacement for
> > > date -v-1d :
> > 
> > Then the program will contain perl, ksh and awk code? There are too many
> > languages used, aren't there? Also realize please that base system does not

welcome in the portable unix shell programming world ;^)

> > contain ksh. Monolithic perl code, without awk & ksh, will be better because
> > perl is in base system already...

not everybody known perl, while everybody known sh/sed/awk.

> Quite so.  The current admixture of sh and perl in 470.status-named seems
> unaesthetic to me.

I'll see if it's possible to rewrite this perl script.

> On the other hand, FreeBSD /bin/sh is a lot more like Solaris /bin/ksh than it is 
>like Solaris /bin/sh.  Cyrille's ksh code should
> port fairly readily to FreeBSD /bin/sh.

first of all, it's not my code, but the code is free.
here is an ash (POSIX?) port of date2julian and julian2date.
please, left the (c)opytight where it is. thanks.

# Date calculations using POSIX shell
# Gregorian calendar only.
# Tapani Tarvainen July 1998, May 2000
# This code is in the public domain.

# Julian Day Number from calendar date
date2julian ()  #  day month year
{
  local day month year tmpmonth tmpyear

  day=$1;  month=$2;  year=$3
  tmpmonth=$(( (12 * $year) + $month - 3 ))
  tmpyear=$(( $tmpmonth / 12 ))
  echo $(( (((734 * $tmpmonth) + 15) / 24) - (2 * $tmpyear) + \
    ($tmpyear / 4) - ($tmpyear / 100) + ($tmpyear / 400) + \
    $day + 1721119 ))
}

# Calendar date from Julian Day Number
julian2date ()  # julianday
{
  local day month year tmpday centuries

  tmpday=$(( $1 - 1721119 ))
  centuries=$(( ((4 * $tmpday) - 1) / 146097 ))
  tmpday=$(( $tmpday + $centuries - ($centuries / 4) ))
  year=$(( ((4 * $tmpday) - 1) / 1461 ))
  tmpday=$(( $tmpday - ((1461 * $year) / 4) ))
  month=$(( ((10 * $tmpday) - 5) / 306 ))
  day=$(( $tmpday - (((306 * $month) + 5) / 10) ))
  month=$(( $month + 2 ))
  year=$(( $year + ($month / 12) ))
  month=$(( ($month % 12) + 1 ))
  echo $day $month $year
}

now=$(date "+%d %m %Y")
julian=$(date2julian $now)
julian=$(( $julian - 1 ))
yesterday=$(julian2date $julian)

echo $now : $yesterday

Cyrille.
--
home: mailto:[EMAIL PROTECTED]   UNIX is user-friendly; it's just particular
work: mailto:[EMAIL PROTECTED]   about who it chooses to be friends with. 

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to