我需要在用来控制第三方程序执行的Unix shell脚本中进行日期运算。
我使用一个函数递增一天,使用另一个函数递减:
IncrementaDia(){
echo $1 | awk '
BEGIN {
diasDelMes[1] = 31
diasDelMes[2] = 28
diasDelMes[3] = 31
diasDelMes[4] = 30
diasDelMes[5] = 31
diasDelMes[6] = 30
diasDelMes[7] = 31
diasDelMes[8] = 31
diasDelMes[9] = 30
diasDelMes[10] = 31
diasDelMes[11] = 30
diasDelMes[12] = 31
}
{
anio=substr($1,1,4)
mes=substr($1,5,2)
dia=substr($1,7,2)
if((anio % 4 == 0 && anio % 100 != 0) || anio % 400 == 0)
{
diasDelMes[2] = 29;
}
if( dia == diasDelMes[int(mes)] ) {
if( int(mes) == 12 ) {
anio = anio + 1
mes = 1
dia = 1
} else {
mes = mes + 1
dia = 1
}
} else {
dia = dia + 1
}
}
END {
printf("%04d%02d%02d", anio, mes, dia)
}
'
}
if [ $# -eq 1 ]; then
tomorrow=$1
else
today=$(date +"%Y%m%d")
tomorrow=$(IncrementaDia $hoy)
fi
但现在我需要做更复杂的算术。
这是最好的和更兼容的方式吗?
发布于 2008-08-08 23:26:56
发布于 2011-11-23 23:22:32
这是一种在shell脚本中进行日期计算的简单方法。
meetingDate='12/31/2011' # MM/DD/YYYY Format
reminderDate=`date --date=$meetingDate'-1 day' +'%m/%d/%Y'`
echo $reminderDate
下面是可以使用date
实用程序实现的日期计算的更多变体。http://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/
这在RHEL上对我很有效。
发布于 2008-08-22 02:19:44
要对UNIX上的日期进行算术运算,您需要将日期作为自UNIX纪元以来的秒数,进行一些计算,然后将其转换回可打印的日期格式。date命令应该能够为您提供自纪元以来的秒数,并将该数字转换回可打印的日期。我的本地日期命令可以做到这一点,
% date -n
1219371462
% date 1219371462
Thu Aug 21 22:17:42 EDT 2008
%
请参阅本地的date(1)
手册页。若要递增一天,请添加86400秒。
https://stackoverflow.com/questions/6467
复制相似问题