Answers:
使用GNU date
:
$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015
某些shell内置了对日期操作的支持:
与ksh93
:
$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015
与zsh
:
$ zmodload zsh/datetime
$ strftime -s d %Y-%m-01-12 $EPOCHSECONDS
$ strftime -rs d %Y-%m-%d-%H $d
$ strftime %d%b%Y $((d-86400))
31Jul2015
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
。您收到错误消息,因为那里没有2011-12-30。也就是说,日期偏移是在日历时间上完成的。2011-12-31减去31天将为您提供2011-11-30,因为它使31减少31。当前时间不减少31 * 24 * 60 * 60 * 60秒。与TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
此相比,第29天,即这次,它是24 * 60 * 60 * 60秒前的日期。
这是在Mac OS上使用BSD date
实用程序的版本:
date -v1d -v-1d +%d%b%Y
参数按顺序应用。您可以想象一下,日期是从一个参数传递到下一个参数的。例如:
date
)-> 2017-03-06-v1d
)-> 2017-03-01-v-1d)
-> 2017-02-28+%d%b%Y
)-> 2017年2月28日您可以使用来达到任意数量的前进或后退月份date -v-1m -v1d -v-1d
,而用所需的前进或后退-1m
月份数(+1m
)代替。
这就是通用答案。该问题专门询问有关开始日期的日期。Mac OS / BSD日期实用程序不允许您提供起始日期戳,但可以单独设置每个日期元素:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 2014年12月31日