bash - 在 UNIX BASH 中计算上一个季度月和年的结束
问题描述
我对 Unix 很陌生,在 UNIX Bash 中计算上一个季度月末和年份时需要帮助
例如:- 如果今天的日期是2021-05-11,输出需要是032021(2021 年 3 月) 如果今天的日期是2021-01-31,输出需要是122020(2020 年 12 月)
我确实尝试了案例陈述,并且按预期工作。
m=$(date +%m)
y=$(date +%Y)
if [ $m -ge 1 -a $m -le 3 ]; then
prev_qtr_mon=12
prev_qtr_yr=`expr $y - 1`
elif [ $m -ge 4 -a $m -le 6 ]; then
prev_qtr_mon=03
prev_qtr_yr=$y
elif [ $m -ge 7 -a $m -le 9 ]; then
prev_qtr_mon=06
prev_qtr_yr=$y
elif [ $m -ge 10 -a $m -le 12 ]; then
prev_qtr_mon=09
prev_qtr_yr=$y
fi
echo ${prev_qtr_mon}
echo ${prev_qtr_yr}
acct_dt=${prev_qtr_mon}${prev_qtr_yr}
echo ${acct_dt}
有没有一种有效的方法来实现这一点而不是大案例陈述?你能帮忙吗?
解决方案
我认为这是一个关于数学的问题,而不是关于编程的问题。如果您的月份存储在 上m
,如您的示例代码中所示,则该语句
((quartnum=M/4))
给你quartnum
一个从 0 到 3 的数字,其中 0 是第一节,3 是最后一节。这是 m 实际所在的季度。
上一季度则少一个或多 3 个(取决于您喜欢如何看待它),并且您必须调整年度边界处的环绕。我会用 +3 而不是 -1 来避免使用负数进行模计算:
((prevquartnum=(quartnum+3)%4))
要将季度映射到一个月,您可以使用一个不太优雅但简单的表格:
quartmonth=(3 6 9 12)
这表明第一季度(即 prevquartnum 0)与三月相关联,第二季度与六月相关联,依此类推。您现在得到所需的月份${quartmonth[$prevquartnum]}
我会用一个简单的方法来处理年份if
:如果m
是 3 或更少,你必须从年份中减去 1。否则,它只是当前年份。
推荐阅读
- sql-server - 尝试连接到 SQL Server EF 错误:“此平台不支持关键字“网络库”
- javascript - HtmlWebpackPlugin 之前的自定义加载器导致“意外令牌”错误
- kubernetes - 出现错误 PodSpec.containers: got "map", expected "array" or Container.volumeMounts: got "map", expected "array";
- amazon-web-services - 可以基于源域指向正确环境资源的 AWS Route 53 别名记录
- mysql - MySQL SQL 选择查询和替换值
- c++ - 什么时候实际为 C++ 中的 new int[250000000] 分配内存?
- c++ - 在 C++ 中的函数调用中自动解包元组
- c# - 使用 appsettings.json 配置在程序的 GUI 中显示 Serilog 日志
- 2d - Godot raycast2D区域检测不起作用
- continuous-integration - Kubectl / Helm 等待所有资源被创建