作为预先要求,我需要在Unix(solaris)csh中获取上个月的日期。
set Lmit_Date=`date --date='1 month ago' +%Y%m%d`
上面的命令将获取上个月的日期并在Linux服务器上正常工作。但我们的服务器是Solaris,并且提到命令不起作用。
请有人建议我如何获取上个月的日期
答案 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/211665和https://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参数照顾每月的天数。