If you have a system with the GNU version of date, then

date -u +%s

will give the seconds since the Epoch. Unfortunately, it only works with GNU 
date, and so will not work on Solaris, HP-UX or no doubt many other Unix 
systems.

The following script should compute this is a portable manner. Here's a few 
examples

On sage.math, where date accepts +%s

kir...@sage:~$ date -u +%s && ./unixtime
1260720556
1260720556


On an HP-UX system, where date does *not* accept +%s

bash-2.04$ uname -a
HP-UX hpbox B.11.11 U 9000/785 2016698240 unlimited-user license
bash-2.04$  ./unixtime && date -u +%s
1260720771
date: bad format character - s

On an OpenSolaris system, where date does *not* accept +%s

bash-3.2$ ./unixtime && date -u +%s
1260720823
%s


On an IBM server running AIX 6.1, where date does accept +%s

$ uname -a
AIX client1 1 6 00C6B7C04C00
$  ./unixtime && date -u +%s
1260721013
1260721013



For every system I am able to check this on, the following script gives exactly 
the same output as the GNU date command, but in a more portable manner.

Could a few people check it on their systems.

If it does work, I'd propose it is used in place of the GNUism introduced in
http://trac.sagemath.org/sage_trac/ticket/6744

Currently the file .BUILDSTART created by #6744 is not actually used anywhere 
in 
Sage, but clearly the intension is to use it at some point, in which case it 
will be found not to work on some systems.

Dave
-----------------------------------------------


#!/bin/sh
# Compute seconds since the Epoch.

# Call 'date'. Note that
# %Y = year including century
# %j = day number (1-365)
# %H = hour (0-23)
# %M = minute (0-59)
# %S = seconds (0-59)

if type env >/dev/null 2>&1 ; then
     set -- `env LC_ALL=C LC_TIME=C LANG=C date -u '+%Y %j %H %M %S'`
else
     set -- `date -u '+%Y %j %H %M %S'`
fi

# $1 = year including century
# $2 = day number (1-365)
# $3 = hour (0-23)
# $4 = minute (0-59)
# $5 = seconds (0-59)

if [ $? -ne 0 ] || [ $# -lt 5 ] ; then
   TIME="Error computing seconds since the Epoch"
fi

DAYS=`expr 365 \* \( $1 - 1970 \) + \( $1 - 1969 \) / 4 + $2 - 1`
TIME=`expr $5 + 60 \* \( $4 + 60 \* \( $3 + 24 \* $DAYS \) \)`
echo $TIME


-- 
To post to this group, send an email to [email protected]
To unsubscribe from this group, send an email to 
[email protected]
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to