UNIX上个月和年份,格式为YYYYMM

时间:2016-08-23 07:50:59

标签: date unix

我需要为格式为YYYYMM的值分配一个变量,例如今天运行上个月的值应该生成为

Var1 = 201607

是否有可用的构建方法?你能分享一下生成这个的步骤吗?

1 个答案:

答案 0 :(得分: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”之前的通用时间   开始进行日历计算。