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

如何使用Groovy将YYYY-MM-DD格式日期转换为CYYDDD格式

Groovy实现YYYY-MM-DD到CYYDDD格式的日期转换

要完成YYYY-MM-DD到CYYDDD的格式转换,核心是拆解出世纪码(C)、**年份后两位(YY)和当年第几天(DDD)**三个部分再拼接:

  • 世纪码C:取年份前两位减19(比如2023年的前两位是20,20-19=1)
  • YY:年份的最后两位数字
  • DDD:当年的第几天,不足三位时补前导零

方法一:基于Calendar和SimpleDateFormat(兼容旧版本环境)

def convertToCyyddd(String dateStr) {
    // 解析输入的YYYY-MM-DD格式日期
    def inputFormatter = new SimpleDateFormat("yyyy-MM-dd")
    def date = inputFormatter.parse(dateStr)
    
    def calendar = Calendar.getInstance()
    calendar.time = date
    
    // 计算各组成部分
    def year = calendar.get(Calendar.YEAR)
    def centuryCode = (year / 100) - 19
    def yyPart = year % 100
    def dayOfYearPart = String.format("%03d", calendar.get(Calendar.DAY_OF_YEAR))
    
    return "${centuryCode}${yyPart}${dayOfYearPart}"
}

// 测试示例
println(convertToCyyddd("2023-05-17")) // 输出:123137

方法二:基于Java 8+ DateTime API(推荐,线程安全)

如果环境支持Java 8及以上,建议使用更现代的LocalDate和DateTimeFormatter:

import java.time.LocalDate
import java.time.format.DateTimeFormatter

def convertToCyyddd(String dateStr) {
    // 解析日期
    LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ISO_LOCAL_DATE)
    
    // 拆分并计算各部分
    int year = date.getYear()
    int centuryCode = (year / 100) - 19
    int yyPart = year % 100
    String dayOfYearPart = String.format("%03d", date.getDayOfYear())
    
    return "${centuryCode}${yyPart}${dayOfYearPart}"
}

// 测试验证
println(convertToCyyddd("2023-05-17")) // 输出:123137

注意事项

  • 输入的日期字符串必须是合法的YYYY-MM-DD格式,否则会抛出解析异常
  • 对于19xx年的日期,比如1999-01-01,转换结果为099001
  • String.format("%03d", ...)用于确保当年天数始终是三位数字,避免出现1、10这类不足三位的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:52:14