Contents

Groovy 中字符串转换为日期

1. 概述

在这个简短的教程中,我们将学习如何在Groovy 中将表示日期的String转换为真实的Date对象。

但是,我们应该记住,这种语言是对 Java 的增强。因此,除了新的 Groovy 方法之外,我们仍然可以使用所有普通的旧 Java 方法。

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 版开始可用。

版本 2.4.1 引入了一个变体,它接受指示时区的第三个参数:Date.parse(String format, String input, TimeZone zone)

但是,从 2.5.0 开始,发生了重大变化 ,这些增强功能不再随groovy-all 一起提供。 因此,展望未来,它们需要作为一个单独的模块包含在内,名为groovy-dateutil

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-dateutil</artifactId>
    <version>2.5.6</version>
</dependency>

还有 3.0.0 版本,但目前处于 Alpha 阶段。

3. 使用 JSR-310 LocalDate

从版本 8 开始,Java 引入了一套全新的工具来处理日期:日期/时间 API

出于多种原因,这些 API 更好,应该优先于旧的API 。

让我们看看如何利用 Groovy 的java.time.LocalDate解析功能:

def date = LocalDate.parse(input, pattern)