如何使用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
相关产品推荐
相关产品推荐

