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

