使用内置 printf 函数的 ksh93 日期计算

ksh93 date calculation using builtin printf function

我需要在 shell 脚本中进行日期计算。不幸的是,我的操作系统 (SunOS) 没有提供非常方便的日期功能:它不支持 -d 选项,而这正是我所需要的。

在网上漫游以寻找替代解决方案,我发现一些看起来足够强大的东西 ksh93 printf 内置函数。它支持这样的语法:

yesterday=${ printf "%(%Y%m%d)T" yesterday; }
friday=${ printf "%(%Y%m%d)T" "3 days ago"; }

在我的例子中,我需要在计算日期之前计算2天,在我的理解中应该这样写(我的日期格式为“ YYYYMMDD"):

dayinthepast=${ printf "%(%Y%m%d)T" "3 days before $mydate"; }

dayinthepast=${ printf "%(%Y%m%d)T" "$mydate - 3 days"; }

但是不行。

更令人惊讶的是,第二个语法被识别,但它将减号作为加号并在给定日期上加上 3 天。

我已经阅读了一篇有用的博客,介绍了 ksh93 printf 内置语法,但它没有涵盖我的案例。我在这里给出link(感谢作者):ksh93-date-manipulation

如有任何帮助,我们将不胜感激。 谢谢

这对我在 AIX 7.1 上有效:

$ ksh93
$ MY_DATE=20210601
$ printf "%(%Y%m%d)T" "${MY_DATE} 3 days ago"
20210529

从 link 得到提示 - ksh93-date-manipulation - 那里有一段提到“23 天前”