Groovyで文字列を日付に変換する

  • link:/category/programming/ [プログラミング]

  • Groovy

1. 概要

この短いチュートリアルでは、日付を表す_String_をlink:/groovy-language[Groovy]で実際の_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では、この操作をより簡単に実行できます。 *便利な静的メソッド内に同じ動作をカプセル化します* _http://docs.groovy-lang.org/2.5.6/html/api/org/apache/groovy/dateutil/extensions/DateUtilStaticExtensions.html#parse(java。 util.Date、java.lang.String、java.lang.String)[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では、タイムゾーンを示す3番目のパラメーター_Date.parse(String format、String input、TimeZone zone)_を受け入れるバリアントが導入されました。
ただし、2.5.0からは、http://groovy-lang.org/releasenotes/groovy-2.5.html#Groovy2.5releasenotes-Breakingchanges [重大な変更がありました]になり、これらの拡張機能は_https://に同梱されなくなりました。 search.maven.org/search?q=a:groovy-all%20AND%20g:org.codehaus.groovy[groovy-all]._
したがって、今後は、https://search.maven.org/search?q = a:groovy-dateutil [_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は日付を処理するまったく新しいツールセットを導入しました:link:/java-8-date-time-intro%22[Date/Time API]。
これらのAPIはいくつかの理由で優れており、*レガシーAPIよりも優先されるべきです*。
Groovyの_java.time.LocalDate_解析機能を活用する方法を見てみましょう。
def date = LocalDate.parse(input, pattern)

4. 結論

Groovy言語でa _String_をa _Date_に変換し、特定のバージョン間の特性に注意を払う方法を見てきました。
いつものように、ソースコードと単体テストはhttps://github.com/eugenp/tutorials/tree/master/core-groovy/[GitHub]で入手できます。