4

私はGroovyにかなり慣れていません(しかし、すでに気に入っています)。私はコーディングは初めてではありませんが、これまであまり経験がありませんでした。

私は何をやっている?Excel ファイルから特定の情報を抽出して XML (SOAP) メッセージを作成し、それを Web サービスに転送しています。Date conversion を除いて、これまでのところすべて正常に動作します。

文字列の日付を変数に保存しています

odate = 'Wed Oct 31 00:00:00 CET 2012' 

この日付を次のような形式に再フォーマットする必要があります

"10/31/2012 10:09:00" (MM/dd/yyyy HH:mm:ss)

別の質問で述べたように日付を解析しようとしましたが、例外しかありません。

String odate = 'Wed Oct 31 00:00:00 CET 2012'
def parsedodate = new Date().parse('E MMM dd H:m:s z yyyy', odate)

println parsedodate.format('MM/dd/yyyy h:m:s')

スローされた例外 31.10.2012 10:18:25 org.codehaus.groovy.runtime.StackTraceUtils サニタイズ

警告: スタックトレースをサニタイズしています:

java.text.ParseException: 解析不能な日付: "Wed Oct 31 00:00:00 CET 2012"


少し読んで、試行錯誤を繰り返した後、どういうわけか parse メソッドがドイツの日付のみを解釈しているように見えることがわかりました。以下は、文字列の日付を手動でドイツ語の形式に変更した後に機能します (これは私がいる場所です)。

String odate = 'Mi Okt 31 00:00:00 2012' //Mi = Wednesday, Okt = October, removed timezone
def parsedodate  = new Date().parse('E MMM dd H:m:s yyyy', odate) // removed the z
println parsedodate .format('MM/dd/yyyy h:m:s')

ただし、英語の日付形式を受け入れるにはパーサーが必要です。私は何をしますか(間違っていますか)?

4

2 に答える 2

1

ロケール対応のSimpleDateFormatインスタンスにアクセスするには、Javaを使用する必要があります。

SimpleDateFormat englishDateFormat = new SimpleDateFormat( englishPattern , Locale.ENGLISH);
SimpleDateFormat germanDateFormat = new SimpleDateFormat( germanPattern , Locale.GERMAN);

Date englishDate = englishDateFormat.parse( odate );
Date germanDate = germanDateFormat.parse( odate );

String englishOutput = englishDate .format( englishPattern );
String germanOutput = germanDate .format( germanPattern );
于 2012-10-31T13:32:25.727 に答える
1

あなたの問題に対する完全な解決策は次のとおりです。

import java.text.SimpleDateFormat
odate="Wed Oct 31 00:00:00 CET 2012"

englishPattern="E MMM dd H:m:s z yyyy"

SimpleDateFormat englishDateFormat = new SimpleDateFormat( englishPattern , Locale.ENGLISH);
//SimpleDateFormat germanDateFormat = new SimpleDateFormat( germanPattern , Locale.GERMAN);

Date englishDate = englishDateFormat.parse( odate );
//Date germanDate = germanDateFormat.parse( odate );

String englishOutput = englishDate .format( englishPattern );
//String germanOutput = germanDate .format( germanPattern );

englishDate.format("MM/dd/yyyy hh:mm:ss")
于 2012-10-31T14:26:42.363 に答える