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

如何使用Groovy将MM/DD/YYYY格式的01/10/2025转换为125010

Groovy实现MM/DD/YYYY到特定儒略日期的转换

根据需求,我们需要将MM/DD/YYYY格式的日期转换为[世纪码][年份后两位][三位年积日]的结构,例如01/10/2025转换为125010。以下是具体实现方案:

核心实现代码

def convertToCustomJulian(String dateStr) {
    // 按MM/DD/YYYY格式解析输入日期
    def date = Date.parse('MM/dd/yyyy', dateStr)
    def cal = Calendar.getInstance()
    cal.setTime(date)
    
    // 拆分计算各组成部分
    def year = cal.get(Calendar.YEAR)
    // 世纪码:年份前两位减19(20世纪对应0,21世纪对应1,以此类推)
    def centuryCode = (year.intdiv(100)) - 19
    // 年份后两位,确保为两位数字
    def yearSuffix = String.format('%02d', year % 100)
    // 年积日,补零至三位
    def dayOfYear = String.format('%03d', cal.get(Calendar.DAY_OF_YEAR))
    
    // 拼接结果并返回
    return "${centuryCode}${yearSuffix}${dayOfYear}"
}

// 测试示例
def inputDate = '01/10/2025'
def result = convertToCustomJulian(inputDate)
println result // 输出:125010

代码说明

  • 日期解析:使用Date.parse方法指定MM/dd/yyyy格式解析输入字符串,小写dd保证单数字日期能被正确识别。
  • 世纪码计算:通过年份整除100取前两位,再减19得到对应世纪码,匹配需求中21世纪对应1的规则。
  • 年份后两位处理:用year % 100提取后两位,配合%02d格式化,确保像2003这样的年份能输出03而非3。
  • 年积日处理:通过Calendar.DAY_OF_YEAR获取一年中的第几天,用%03d格式化为三位数字,比如第5天会输出005。

异常处理优化

如果需要处理无效输入(如格式错误、不存在的日期),可添加异常捕获逻辑:

def convertToCustomJulian(String dateStr) {
    try {
        def date = Date.parse('MM/dd/yyyy', dateStr)
        def cal = Calendar.getInstance()
        cal.setTime(date)
        
        def year = cal.get(Calendar.YEAR)
        def centuryCode = (year.intdiv(100)) - 19
        def yearSuffix = String.format('%02d', year % 100)
        def dayOfYear = String.format('%03d', cal.get(Calendar.DAY_OF_YEAR))
        
        return "${centuryCode}${yearSuffix}${dayOfYear}"
    } catch (ParseException e) {
        throw new IllegalArgumentException("无效的日期格式,请输入MM/DD/YYYY格式的日期", e)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:42:11