get unix timestamp

How can I get the unix timestamp from AIX?

Consider the following perl script :

#!/usr/bin/perl
#
# Accepts date input as Mon/dd/yyyy hh:mm:ss and returns unix timestamp (epoch)

use Time::Local;

my $d = $ARGV[0];
my $t = $ARGV[1];
my $m = "";

@d = split /\//, $d;
@t = split /:/, $t;

if ( $d[0] eq "Jan" ) { $m = 0 }
elsif ( $d[0] eq "Feb" ) { $m = 1 }
elsif ( $d[0] eq "Mar" ) { $m = 2 }
elsif ( $d[0] eq "Apr" ) { $m = 3 }
elsif ( $d[0] eq "May" ) { $m = 4 }
elsif ( $d[0] eq "Jun" ) { $m = 5 }
elsif ( $d[0] eq "Jul" ) { $m = 6 }
elsif ( $d[0] eq "Aug" ) { $m = 7 }
elsif ( $d[0] eq "Sep" ) { $m = 8 }
elsif ( $d[0] eq "Oct" ) { $m = 9 }
elsif ( $d[0] eq "Nov" ) { $m = 10 }
elsif ( $d[0] eq "Dec" ) { $m = 11 };

$time = timelocal($t[2], $t[1], $t[0], $d[1], $m, $d[2]);

print "$time\n";

usage :

The output is :

HTH.

Some of my servers don't have Perl installed, I need a SH solution.

Do you have the stat utility on your machine ? Doesn't the date utility in AIX have anything similiar ?

why so complicated?

perl -e "print time();"

does the same....

I don't have the stat command, also the date command doesn't have the %s option or something similar like the date in Linux distros.

Here's a korn shell way to do it. You'll have to add your timezone info near the bottom. I live in CST zone so I don't care about the others. :slight_smile:

##*******************************************************************************
## Script       epoch
## Purpose      Take date in formatted string as an argument and coverts it
##              into epoch time (seconds since 1/1/1970)
## Usage        ./epoch Aug 25 23:59:59 2007 GMT
##===============================================================================
## History
## 2007/01/15  kah00na    Creation of script (some code from the internet)
##*******************************************************************************

year=$4
month=$1
day=$2
hour=$(echo $3 | cut -d: -f1)
min=$(echo $3 | cut -d: -f2)
sec=$(echo $3 | cut -d: -f3)
tz=$5

# Convert month to number
if [ $month = "Jan" ]; then
        month=1
elif [ $month = "Feb" ]; then
        month=2
elif [ $month = "Mar" ]; then
        month=3
elif [ $month = "Apr" ]; then
        month=4
elif [ $month = "May" ]; then
        month=5
elif [ $month = "Jun" ]; then
        month=6
elif [ $month = "Jul" ]; then
        month=7
elif [ $month = "Aug" ]; then
        month=8
elif [ $month = "Sep" ]; then
        month=9
elif [ $month = "Oct" ]; then
        month=10
elif [ $month = "Nov" ]; then
        month=11
elif [ $month = "Dec" ]; then
        month=12
fi

# leap days in past years
leapdays=$(( (year - 1969)/4 ))

# Is this year a leap year?
leap=$(( year % 4 == 0 ))

# Days in each month this year.
mdays[1]=31
mdays[2]=$((28+leap))
mdays[3]=31
mdays[4]=30
mdays[5]=31
mdays[6]=30
mdays[7]=31
mdays[8]=31
mdays[9]=30
mdays[10]=31
mdays[11]=30
mdays[12]=31

# days since the epoch, not counting earlier months this year
daycount=$(( (year - 1970) * 365 + leapdays + day - 1))

# Step through earlier months this year and add the days
m=$((month - 1))
while [ $m -ge 1 ]; do
        #echo "month=$m"
        daycount=$((daycount+${mdays[$m]} ))
        m=$((m-1))
done

# Now the seconds
epoch=$(( ( (daycount * 24 + hour) * 60 + min) * 60 + sec ))

# Add the time zones that apply to you
case "$tz" in
        #GMT) epoch=$((epoch + 0));;
        #EST) epoch=$((epoch + 18000));;
        CST) epoch=$((epoch + 21600));;
        #GMT) epoch=$((epoch + 21600));;
        #*)   epoch="ERROR: unrecognized on time zone";;
esac
echo "${epoch}"

EDIT: The "CODE" tags make the code look better. :wink: