首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Unix shell脚本中的日期算法

Unix shell脚本中的日期算法
EN

Stack Overflow用户
提问于 2008-08-08 23:24:03
回答 9查看 72K关注 0票数 19

我需要在用来控制第三方程序执行的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

但现在我需要做更复杂的算术。

这是最好的和更兼容的方式吗?

EN

回答 9

Stack Overflow用户

发布于 2008-08-08 23:26:56

假设您有GNU date,如下所示:

date --date='1 days ago' '+%a'

similar phrases

票数 74
EN

Stack Overflow用户

发布于 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上对我很有效。

票数 17
EN

Stack Overflow用户

发布于 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秒。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档