日期命令中的变量

日期命令中的变量

date我想在command内部使用变量。我的系统不支持 GNU 日期。我使用 Sunos,当我使用datewith-d选项时,它显示-d为错误的替代。

#!/usr/bin/ksh
RELEASE_DATE="28 OCT 2018" 
RELEASE_DATE_MINUS_2=`date -"${RELEASE_DATE: -2} ${RELEASE_DATE:4:3} ${RELEASE_DATE:0:4} - 2 days" '+%Y-%m-%d'`
echo "Release is $RELEASE_DATE" 
echo "release_date-2 is $RELEASE_DATE_MINUS_2

我已经尝试过上面的代码片段。我应该传递我从另一个文件release_date中得到的实际数据,就像这个输入一样,我应该在该日期前两天得到这样的输入。.cnf28OCT20182018-10-26

答案1

带壳zsh

zmodload zsh/datetime
rel_date=2018OCT28
strftime -rs d %Y%b%d.%H $rel_date.12 &&
  strftime -s two_days_before %Y-%m-%d $((d - 86400*2)) || exit

echo $two_days_before

答案2

Perl 可以用于以下用途:

perl -MTime::Piece -slE 'say +(Time::Piece->strptime($date, "%Y%b%d") - 2 * 86_400)->ymd' -- -date="$rel_date"

您指定传入日期变量的格式以将其解析为时间对象,执行日期算术,然后输出为所需的 YYYYY-mm-dd 格式。

记录在这里:https://perldoc.perl.org/Time/Piece.html

答案3

您用 shell 标记了它,所以我假设该变量应该在 shell 中,但仅供参考,=shell 变量周围不能有空格。

GNUdate不会接受该格式的输入日期,但会接受它,28 OCT 2018因此使用 shell 参数扩展我们可以重新排列日期(只要它始终采用相同的格式):

date -d "${rel_date: -2} ${rel_date:4:3} ${rel_date:0:4}"

现在为了减去 2 天,我们只需添加:

date -d "${rel_date: -2} ${rel_date:4:3} ${rel_date:0:4} - 2 days" 

并以您要求的格式输出

date -d "${rel_date: -2} ${rel_date:4:3} ${rel_date:0:4} - 2 days" '+%Y-%m-%d'

答案4

了解您使用的是哪个 ksh{88,93} 可能很有用。

根据 ksh93(1) 你可以找到一些关于日期的信息:

 printf format [ arg ... ]
 %(date-format)T

--实际例子

: printf "%(%d.%m,%Y)T\n"             
11.01,2019
: printf "%(%d.%m.%Y)T\n" "2 days ago"
09.01.2019

相关内容