Solaris 11 中的日期显示

Solaris 11 中的日期显示
# date +"%b %d %H:$(( $(date +'%M')-5))"
Nov 20 12:45
date +"%b %d %H:$(( $(date +'%M')-55))"
Nov 20 12:-5

我为什么要来-5这里?如何纠正?请帮忙。

答案1

可能是因为你在 12:50 运行它,其中date +%M给出了 50,当你减去 5 时,它变成 45;如果你减去 55,则变成 -5。

在 12:00 时,您的第一个分数也会得到 -5。

在 12:07 时,您将得到12:2而不是12:02,而在 12:09 时,某些 shell 会抱怨09不是有效的八进制数。您不能只将分钟字段减去 5 来获得提前 5 分钟的时间。例如,考虑一下在 时Jan 1 00:00,它应该给您Dec 31 23:55

对于 Solaris 上的日期计算,您可以使用perlzsh,但默认情况下并不总是安装后者。要获取 5 分钟前的时间:

perl -MPOSIX -le 'print strftime("%b %d %R", localtime(time - 5*60))'

或者:

zsh -c 'zmodload zsh/datetime; strftime "%b %d %R" $((EPOCHSECONDS - 5*60))'

实际上从 Solaris 11 版本开始,/bin/sh实际上/bin/ksh是 ksh93,所以你也可以使用ksh那里(最好不要sh像 whilesh那样)现在由 ksh93 实现,将来可能会改变,并且标准sh语言没有这些功能):

ksh -c 'printf "%(%b %d %R)T\n" "5 minutes ago"'

正如 @glennjackman 在评论中指出的,如果您已经bash安装,您还可以执行以下操作:

bash -c 'printf -v t "%(%s)T" -1 && printf "%(%b %d %R)T\n" "$((t - 5*60))"'

(Solaris 版本 11 中也添加了对 bash 的支持,%s并且是最新版本的 bash)。

虽然我们正在积累更多语言,但如果您有 TCL 口译员,例如expect

expect -c 'puts [clock format [
  clock add [clock seconds] -5 minute] -format "%b %d %R"]'

或者python3

python3 -c 'import time; print(time.strftime("%b %d %R", time.localtime(time.time() - 5*60)))'

相关内容