You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写更优雅的Groovy脚本实现季度格式日期字符串比对

优化实现方案

原来的代码核心问题是硬编码substring下标截取内容,只要字符串格式出现微小变动(比如前后多空格、年份位数变化)就会报错,优化后用正则匹配提取字段,容错性和扩展性都更好,代码也更简洁:

/**
 * 解析FY格式季度字符串,返回可直接比对的季度数值
 * @param fyStr 格式为FYxx Qx的季度字符串,例如FY22 Q4
 * @return 折算后的总季度数,可直接用于差值计算
 */
def parseFyQtr(String fyStr) {
    // 正则匹配提取年份和季度,自动忽略前后多余空格
    def matcher = (fyStr =~ /^\s*FY(\d{2})\s*Q(\d)\s*$/)
    if (!matcher.matches()) {
        throw new IllegalArgumentException("输入格式非法:${fyStr},要求格式为FYxx Qx")
    }
    int fullYear = 2000 + matcher[0][1] as int
    int quarter = matcher[0][2] as int
    return fullYear * 4 + quarter
}

// 调用示例
def vals = ["FY22 Q4","FY23 Q2"]
def qtrDiff = parseFyQtr(vals[1]) - parseFyQtr(vals[0])
println qtrDiff

优化点说明

  • 取消了硬编码的下标截取逻辑,用正则匹配提取字段,支持字符串前后带空格、年份和季度之间多空格的场景
  • 新增格式校验,输入不符合规则时会抛出明确的错误提示,避免原代码可能出现的下标越界、类型转换失败等模糊报错
  • 去掉了不必要的基准年参数,因为计算两个季度的差值时,基准年的数值会被抵消,不需要额外维护2010的基准值
  • 封装为通用方法,可复用性更强,如果后续需要适配4位年份的格式(比如FY2022 Q4),只需要调整正则和年份转换逻辑即可

内容的提问来源于stack exchange,提问作者Hightower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:54:10