1. 概述
在这篇简短的教程中,我们将学习如何在 Groovy 中将表示日期的 String 转换为真正的 Date 对象。
不过需要提醒的是,Groovy 是 Java 的增强版,因此我们不仅可以使用所有传统的 Java 方法,还可以使用 Groovy 提供的新特性来简化操作。
2. 使用 DateFormat
首先,我们依然可以像在 Java 中那样使用 DateFormat 来解析字符串:
def pattern = "yyyy-MM-dd"
def input = "2019-02-28"
def date = new SimpleDateFormat(pattern).parse(input)
不过 Groovy 提供了一个更简洁的方式:它将这种行为封装在了静态方法 Date.parse(String format, String input) 中:
def date = Date.parse(pattern, input)
这个方法本质上是对 java.util.Date
的扩展,每次调用时都会内部实例化一个 java.text.DateFormat
对象,以保证线程安全。
2.1. 版本兼容性问题
⚠️ 注意:Date.parse(String format, String input)
方法从 Groovy 1.5.7 版本开始提供。
✅ Groovy 2.4.1 引入了一个支持时区的重载版本:Date.parse(String format, String input, TimeZone zone)
。
❌ 但从 Groovy 2.5.0 开始,出现了破坏性变更,这些扩展不再包含在 groovy-all 中。
因此,从 2.5.0 起,如果你需要使用这些功能,需单独引入模块 groovy-dateutil:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-dateutil</artifactId>
<version>2.5.6</version>
</dependency>
📌 另外,Groovy 3.0.0 也提供了该功能,但目前仍处于 Alpha 阶段。
3. 使用 JSR-310 的 LocalDate
从 Java 8 开始,引入了全新的日期时间 API —— Date/Time API,它在很多方面都优于旧的日期类(如 Date
和 Calendar
),应该优先使用。
在 Groovy 中也可以很方便地使用 java.time.LocalDate
来解析日期字符串:
def date = LocalDate.parse(input, pattern)
4. 总结
我们已经了解了在 Groovy 中如何将 String 转换为 Date,并注意到了不同版本之间的差异和兼容性问题。
一如既往,本文的源码和单元测试可以在 GitHub 上找到。