私はこれをGroovyでコーディングしています
私は現在、面倒なことを何もすることなく、日付に文字列を変換しようとしています。
String theDate = "28/09/2010 16:02:43";
def newdate = new Date().parse("d/M/yyyy H:m:s", theDate)
出力:
Tue Aug 10 16:02:43 PST 2010
上記のコードは問題なく動作しますが、私の文字列が次のように変更された場合:
String testDate = "Tue Aug 10 16:02:43 PST 2010"
def newerdate = new Date().parse("d/M/yyyy H:m:s", testDate)
「火にはそのような価値はない」と教えてくれます。日付の解析で「E」をスローしようとしましたが、日付を解析できないと言われました。
誰かが2番目の例を解析する方法を説明できますか?
JChronicが最適です。以下に、.fromString()
メソッドをDateクラスに追加して、投げることができるほぼすべてを解析する例を示します。
Date.metaClass.'static'.fromString = { str ->
com.mdimension.jchronic.Chronic.parse(str).beginCalendar.time
}
次のように呼び出すことができます。
println Date.fromString("Tue Aug 10 16:02:43 PST 2010")
println Date.fromString("july 1, 2012")
println Date.fromString("next tuesday")
String
をDate
に「キャスト」するGroovyの方法を探し回って、この記事に出会いました: http://www.goodercode.com/wp/intercept-method-calls -groovy-type-conversion /
著者はGroovy metaMethodsを使用して、任意のクラスのasType
メソッドの動作を動的に拡張できます。これはウェブサイトからのコードです。
class Convert {
private from
private to
private Convert(clazz) { from = clazz }
static def from(clazz) {
new Convert(clazz)
}
def to(clazz) {
to = clazz
return this
}
def using(closure) {
def originalAsType = from.metaClass.getMetaMethod('asType', [] as Class[])
from.metaClass.asType = { Class clazz ->
if( clazz == to ) {
closure.setProperty('value', delegate)
closure(delegate)
} else {
originalAsType.doMethodInvoke(delegate, clazz)
}
}
}
}
これらは、Groovyの複雑さをラップするConvert
クラスを提供し、任意の型から他の型へのカスタムas
ベースの型変換を簡単に追加できます。
Convert.from( String ).to( Date ).using { new Java.text.SimpleDateFormat('MM-dd-yyyy').parse(value) }
def christmas = '12-25-2010' as Date
これは便利で強力なソリューションですが、metaClassesをいじくり回すことのトレードオフと落とし穴に精通していない人にはお勧めしません。
Date#parse
は非推奨です。代替手段は次のとおりです。
Java.text.DateFormat#parse
フォア:
new SimpleDateFormat("E MMM dd H:m:s z yyyy", Locale.ARABIC).parse(testDate)
この場合の最も簡単な方法は parseToStringDate を使用することだと思います。これはGroovy JDKの機能強化の1つです。
USロケール定数のみを含むパターンEEE MMM dd HH:mm:ss zzz yyyy(土曜日は土曜日)に一致する文字列を解析します。このような文字列は、DateのtoStringメソッドによって生成されます
例:
println (Date.parseToStringDate("Tue Aug 10 16:02:43 PST 2010").format('MM-dd-yyyy'))
お役に立てれば。
以下は、開発中のアプリケーション内での方法です。
import Java.text.SimpleDateFormat
String newDateAdded = "2018-11-11T09:30:31"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
Date dateAdded = dateFormat.parse(newDateAdded)
println(dateAdded)
出力は次のようになります
Sun Nov 11 09:30:31 GMT 2018
あなたの例では、ニーズに合わせて少し調整することができます。もしあなたが私だったら:
String datePattern = "d/M/yyyy H:m:s"
String theDate = "28/09/2010 16:02:43"
SimpleDateFormat df = new SimpleDateFormat(datePattern)
println df.parse(theDate)
これがお役に立てば幸いです。