2016-08-23 149 views

回答

1

在这些情况下,关键是要减一月份,从当月的15天:

$ date --date="$(date +%Y-%m-15) - 1 month" 
Fri Jul 15 00:00:00 CEST 2016 

然后,它仅仅是一个使用正确的格式的事:

$ date --date="$(date +%Y-%m-15) - 1 month" "+%Y%m" 
201607 

要将值存储在var中,只需使用通用的var=$(command)语法即可。

GNU Coreutils → 28.7 Relative items in date strings

模糊的单位可能会导致相关项目的问题。例如, '2003-07-31 -1个月'可能会评估为2003-07-01,因为2003-06-31 是无效日期。为了更可靠地确定前一个月,您可以在本月15日前的月份索要该月份。对于 例如:

$ date -R 
Thu, 31 Jul 2003 13:02:39 -0700 
$ date --date='-1 month' +'Last month was %B?' 
Last month was July? 
$ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' 
Last month was June! 

此外,操纵时钟周围的变化,如 夏令飞跃日期时要小心。在少数情况下,从时钟开始增加或减去 多达24小时,因此在 启动日历计算之前,通过将TZ环境变量设置为“UTC0”,通常采用 通用时间是明智的。