You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Groovy脚本解析日期时遭遇无法解析的日期错误求助

Groovy脚本解析日期时遭遇无法解析的日期错误求助

你好呀!看到你在Groovy脚本里解析日期时碰到了解析失败的异常,我来帮你分析问题并给出解决方案~

首先先明确你遇到的错误:应该是弹出了java.text.ParseException: Unparseable date: "2025-01-31T12:27:00"这类提示对吧?

咱们先看你的原有代码,你用了Groovy里的new Date().parse()来解析,还结合了Calendar类,但旧的DateCalendar本身存在不少设计缺陷,很容易出现时区兼容或者常量引用的问题,这可能是导致你报错的核心原因。

给你两种可行的解决思路:

方案一:修正原有旧API代码

如果你坚持要使用DateCalendar,可以调整代码来规避问题:

  • 确保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

火山引擎 最新活动