«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.