Groovy脚本解析日期时遭遇无法解析的日期错误求助
Groovy脚本解析日期时遭遇无法解析的日期错误求助
你好呀!看到你在Groovy脚本里解析日期时碰到了解析失败的异常,我来帮你分析问题并给出解决方案~
首先先明确你遇到的错误:应该是弹出了java.text.ParseException: Unparseable date: "2025-01-31T12:27:00"这类提示对吧?
咱们先看你的原有代码,你用了Groovy里的new Date().parse()来解析,还结合了Calendar类,但旧的Date和Calendar本身存在不少设计缺陷,很容易出现时区兼容或者常量引用的问题,这可能是导致你报错的核心原因。
给你两种可行的解决思路:
方案一:修正原有旧API代码
如果你坚持要使用Date和Calendar,可以调整代码来规避问题:
- 确保
Calendar的静态常量引用正确,要么用全限定名,要么导入静态常量 - 显式指定解析时的时区,避免默认时区带来的解析异常
调整后的代码示例:
import java.util.Calendar import java.util.TimeZone def curdate = "2025-01-31T12:27:00" // 显式指定时区,这里用UTC做示例,你也可以换成自己需要的时区比如"Asia/Shanghai" def parsedDate = Date.parse("yyyy-MM-dd'T'HH:mm:ss", curdate, TimeZone.getTimeZone("UTC")) def calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")) calendar.setTime(parsedDate) def curhour = calendar.get(Calendar.HOUR_OF_DAY) def curmin = calendar.get(Calendar.MINUTE) println "解析后小时:${curhour},分钟:${curmin}"
方案二:使用现代日期API(强烈推荐)
现在处理日期时间,更推荐用Java 8+引入的java.time包下的类,Groovy对它支持非常友好,而且这类API线程安全、设计直观,完全避开旧API的各种坑。你的日期字符串不带时区信息,用LocalDateTime正好匹配:
import java.time.LocalDateTime import java.time.format.DateTimeFormatter def curdate = "2025-01-31T12:27:00" // 定义和日期字符串匹配的格式器 def dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss") // 解析日期 def parsedDateTime = LocalDateTime.parse(curdate, dateFormatter) // 直接获取小时和分钟 def curhour = parsedDateTime.getHour() def curmin = parsedDateTime.getMinute() println "解析后小时:${curhour},分钟:${curmin}"
额外提醒你:如果后续你的日期字符串带上了时区标记(比如2025-01-31T12:27:00Z或者2025-01-31T12:27:00+08:00),只需要把LocalDateTime换成ZonedDateTime或者OffsetDateTime就可以了,用法基本一致。
备注:内容来源于stack exchange,提问作者Bhagyashri Patwardhan




