如何从命令行生成年季度日期?

如何从命令行生成年季度日期?

我有兴趣输出当前年度季度以及上个月年度季度的表示。

如果今天是 2012 年 1 月 1 日,我想要

2012q1

2011q4

作为各自的输出。

答案1

一种(有点难看)的解决方案,使用 BASH 算术评估和 GNUdate命令:

echo $(date +%Y)q$(( ($(date +%-m)-1)/3+1 ))
echo $(date -d "-1 month" +%Y)q$(( ($(date -d "-1 month" +%-m)-1)/3+1 ))

请注意,它%-m会阻止date0 填充,因此这对于 8 月和 9 月仍然有效。

答案2

所有除以四的解决方案都会失败,例如十一月:

% echo $(( 11/4+1 ))
3

正确的数学是:

$(( (m-1)/3 +1 ))

因此,当月和上个月的季度将是:

echo curr ${y}q$(((m-1)/3+1))
if [ $m = 1 ]; then
  echo prev $((y-1))q4
else
  echo prev ${y}q$(((m-2)/3+1))
fi

只需检查 12 个值,真的……

% for m in {1..12}; do echo $m Q$(((m-1)/3+1)); done
1 Q1
2 Q1
3 Q1
4 Q2
5 Q2
6 Q2
7 Q3
8 Q3
9 Q3
10 Q4
11 Q4
12 Q4

答案3

用我的日期工具:

dconv 2012-01-01 -f '%Y%Q'
=>
  2012Q1

%q标志%Q特定于 dateutils,并以数字或 形式返回季度Q<NUMBER>

答案4

用日期分割格式,用awk计算,用printf格式化:

date +"%Y %m" | awk '{printf ("%4dq%1d\n", $1, ($2/4)+1)}'

只是约会和狂欢:

echo $(date +%Yq)$(($(date +%m)/4+1))

相关内容