«1. Обзор

В этом коротком руководстве мы узнаем, как преобразовать строку, представляющую дату, в реальный объект 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, и внутри он создает .text.DateFormat при каждом вызове для безопасности потоков.

2.1. Проблемы совместимости

Чтобы уточнить, метод Date.parse(формат строки, ввод строки) доступен, начиная с версии 1.5.7 Groovy.

Версия 2.4.1 представила вариант, принимающий третий параметр, указывающий часовой пояс: Date.parse(формат строки, ввод строки, часовой пояс).

Однако начиная с версии 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, но в настоящее время она находится на стадии альфа-версии.

3. Использование JSR-310 LocalDate

Начиная с версии 8, в Java появился совершенно новый набор инструментов для работы с датами: Date/Time API.

Эти API лучше по нескольким причинам, и их следует предпочесть устаревшим.

Давайте посмотрим, как использовать возможности синтаксического анализа java.time.LocalDate от Groovy:

def date = LocalDate.parse(input, pattern)

4. Заключение

Мы видели, как преобразовать String в Date на языке Groovy, заплатив обратите внимание на особенности между конкретными версиями.

Как всегда, исходный код и модульные тесты доступны на GitHub.