Solaris CSH脚本中的上个月日期

时间:2016-03-31 03:43:27

标签: unix solaris csh

作为预先要求,我需要在Unix(solaris)csh中获取上个月的日期。

set Lmit_Date=`date --date='1 month ago' +%Y%m%d` 

上面的命令将获取上个月的日期并在Linux服务器上正常工作。但我们的服务器是Solaris,并且提到命令不起作用。

请有人建议我如何获取上个月的日期

2 个答案:

答案 0 :(得分:2)

问题是由于您使用的是GNU日期扩展。 --date是非标准的。

此外,由于月份长度是可变的,因此GNU日期显示的日期可能是意料之外的,至少可以说......

例如今天是3月31日,但根据GNU日期,“上个月”日期是3月2日:

$ date +%Y%m%d
20160331
$ date --date='1 month ago' +%Y%m%d
20160302

如果您仍想在Solaris上使用GNU日期或找到一些解决方法,请查看以下回复: https://stackoverflow.com/a/23507108/211665https://stackoverflow.com/a/17817087/211665

答案 1 :(得分:1)

您应该能够为您的solaris平台编译coreutils,这将为您提供正确的日期实用程序。但正如名称所示,coreutils会覆盖核心实用程序,您可能希望将其安装到自定义路径中,并通过特殊路径选择正确的日期命令,例如" / opt / coreutils / bin / date"。 / p>

另一种方法是使用符号日期输出拆分计算上个月

eval `date +"set YEAR=%Y; set MONTH=%m ;set DAY=%d"`

现在你可以按照" $ YEAR"," $ MONTH"和" $ DAY"。例如

let 'MONTH--'
if [ "$MONTH" -eq 0 ]; then MONTH=12; let 'YEAR--'; fi
set Lmit_Date=`date --date "$MONTH$DAY0000$YEAR" +"%Y%m%d"`
有点儿。 (我以前用bash所以我不知道这里是否有let。但是还有其他一些shell计算方法.csh可能还有另一个关键字。

此外,您需要使用$ DAY参数照顾每月的天数。