使用内置 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 天前”
我需要在 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 天前”