Shell 将当前日期转换为Unix时间戳,但使用天

Shell 将当前日期转换为Unix时间戳,但使用天,shell,unix,solaris,epoch,solaris-10,Shell,Unix,Solaris,Epoch,Solaris 10,在Solaris中,我尝试编写一个shell脚本,用于将Unix的当前日期转换为1970年1月1日之后的天数。这是因为etc/shadow不使用纪元时间,而是使用“天格式” i、 e“root:G9yPfhFAqvlsI:15841:::”其中15841是日期 所以本质上我应该用什么命令来找出现在的大纪元时间,然后把它转换成天 您可能没有GNU工具,这可能会使事情变得更简单。但这很简单: perl -le 'print int(time/86400)' 我找到了一些伪代码来从基础计算它: if

在Solaris中,我尝试编写一个shell脚本,用于将Unix的当前日期转换为1970年1月1日之后的天数。这是因为etc/shadow不使用纪元时间,而是使用“天格式”

i、 e“root:G9yPfhFAqvlsI:15841:::”其中15841是日期


所以本质上我应该用什么命令来找出现在的大纪元时间,然后把它转换成天

您可能没有GNU工具,这可能会使事情变得更简单。但这很简单:

perl -le 'print int(time/86400)'

我找到了一些伪代码来从基础计算它:

if month > 2 then
  month=month+1
else
  month=month+13
  year=year-1
fi

day=(year*365)+(year/4)-(year/100)+(year/400)+(month*306001/10000)+day
days_since_epoch=day-719591
信用证:)。在同一论坛帖子上,另一位发帖人说,这在Solaris中也能起作用:

truss /usr/bin/date 2>&1 | grep ^time | awk -F"= " '{print $2}'

Solaris
date
实用程序不支持
%s
格式。但是,
nawk
实用程序具有
srand()
函数,当没有参数传递给它时,该函数以秒为单位返回日期

nawk 'BEGIN {print srand()}'
导致

1405529923
要获得天数而不是秒,可以将结果除以86400

nawk 'BEGIN {printf("%d", srand() / 86400)}'

15841是什么?纪元开始后的秒数?如果是这样的话,你应该能够将它除以60*60*24得到天数。15841是1970年1月1日之后的天数,所以我试图找出将今天的日期打印成days@ahoffery格式的命令是什么,你可以使用
echo$($(nawk'BEGIN{print srand()}/86400))
@alvits,这很好,如果你用它来获取uid,最好不要在同一天创建两个用户。谢谢@glennjackman,没有perl你还能这样做吗?我把“truss/usr/bin/date 2>&1 | grep^time | awk-F”=“{print$2}”放入一个变量中,现在你知道我将如何使用“变量”来划分这个变量吗/8600?@user3508234-使用nawk的srand()会更容易。如果您正在运行bash,您可以像
((var=$(nawk'BEGIN{print srand()}')/86400)一样分配给var
。如果您仍然喜欢上述方法,可以在bash上使用
((var/=86400))
,或者在非bash上使用
var=`echo$var/86400 124400 | bc`
。@user3508234:
truss/usr/bin/date 2>&1 | nawk'$1==“time()”{print int($NF/86400)}
@alvits,也可以在awk中进行除法:
nawk'BEGIN print int(srand()/86400)